خاصية protected $with في Laravel السر اللي قليلين بيعرفوه
في Laravel Model فيه ميزة قوية اسمها protected $with بتساعدك في تحميل العلاقات (Relationships) بطريقة تلقائية
في المقال ده، هنتكلم عن الخاصية دي ونشرحها بطريقة بسيطة.
protected $with هي خاصية في Laravel بتسمح لك بتحميل العلاقات تلقائياً مع كل استعلام عن Model.
يعني لو عندك علاقة معينة مثل owner في Model، تقدر تحملها تلقائياً بدون ما تكتب العلاقة في كل مرة.
وفى الصورتين شارح مثال عملي على استخدام protected $with
في المثال ده، استخدمنا protected $with = ['owner']; عشان نحمل العلاقة owner تلقائياً مع كل استعلام عن موديل Blog.
الخلاصة هى ان خاصية protected $with في Laravel بتسهل عليك وبمجرد ما تفهمها هتقدر تستخدمها بشكل كبير في مشاريعك وتستفيد منها تقريبا فى كل مشاريعك
في Laravel Model فيه ميزة قوية اسمها protected $with بتساعدك في تحميل العلاقات (Relationships) بطريقة تلقائية
في المقال ده، هنتكلم عن الخاصية دي ونشرحها بطريقة بسيطة.
protected $with هي خاصية في Laravel بتسمح لك بتحميل العلاقات تلقائياً مع كل استعلام عن Model.
يعني لو عندك علاقة معينة مثل owner في Model، تقدر تحملها تلقائياً بدون ما تكتب العلاقة في كل مرة.
وفى الصورتين شارح مثال عملي على استخدام protected $with
في المثال ده، استخدمنا protected $with = ['owner']; عشان نحمل العلاقة owner تلقائياً مع كل استعلام عن موديل Blog.
الخلاصة هى ان خاصية protected $with في Laravel بتسهل عليك وبمجرد ما تفهمها هتقدر تستخدمها بشكل كبير في مشاريعك وتستفيد منها تقريبا فى كل مشاريعك
هي ال Tables بتاعت ال Database بتتخزن إزاي في ال Memory ؟
إزاي فهم طريقة التخزين ممكن يخليني أحسن من ال Query اللي بعملها من حيث ال Performance.
في البداية أنت عملت جدول إسمه Employee وحطيت فيه بعض الاعمدة زي ال Id و ال Name وال Adress مثلا وخليت
ال Id ده يكون هو ال Primary Key
وخزنت ف الجدول ده مثلا 22 موظف.
الجدول ده بقا هيتخزن في ال Memory عندك علي شكل حاجه إسمها Data pages زي ما هو موضح بالصورة كده
وكل Data page بتكون حجمها 8 Kb
طيب أي شكل Tree اللي ظاهر في الصورة دي ؟
ببساطه أنت لما عملت Id وخليته Primary key
فبيتم إنشاء حاجه إسمها Clustered Index
وال Clusterd index ده بيخلي الداتا بتاعتك مترتبه بناءاً علي ال Id
وكمان بتكون علي شكل Tree بالشكل اللي انت شايفه ده
وبتكون كل نود بتشاور علي الي بعدها
والداتا بتاعت الموظف كامله بتكون موجوده اخر حاجه خالص
بالتالي لو حبيت تبحث عن الموظف الي ال Id بتاعه 11 مثلا
فأنت هتبدا من ال Tree من فوق خالص وتعدي علي ال Nodes كده ما هو موضع ف الصورة لحد ما تنزل في ال Range اللي أنت عاوزه
وتروح للData page اللي أنت متأكد ان الرقم اللي أنت بتبحث عنه موجود بداخلها وده بفضل ال Tree
هتروح لل Data Page تبحث جواها عم رقم 11 اللي أنت عاوزه
لكن كمان أنت مش هتبحث بشكل Linear لا
أنت كده كده ال Date page مترتبه فتقدر تعمل binary search بالتالي هتوصل أسرع وبتدا تقرأ ال Record اللي بتبحث عنه وترجعه.
بالتالي ك Performance ده كويس جداً
طيب لو كنت عمت الجدول بدون Primary key مكنش هيحصل Clustered Index ده بالتالي الداتا مش هتكون مترتبه بالتالي مش هتتخزن بالشكل ده وهيكون فيه عيوب كتير أبرزها
ال Performance أنت بقيت محتاج تعدي علي كلو لحد ما توصل لل Record اللي أنت عاوزه وده بيطلق عليه Table Scan.
طيب لو أنت عملت Primary key علي الId
لكن أنت للأسف بتبحث بال Age فأنت كده محتاج ال Tree بتاعتك تكون منظمه بس المره دي مش بال Id بس
لا بالAge علشان عملية ال Search تكون أسرع
فأنت هنا بقا بايدك تروح تعمل باردو Index علي ال Age بحيث
يشتغل بنفس طريقة ال Id
لكن ال Table بيكون فيه Clustered Index واحد فقط
فأنت هتعمل نوع تاني وهو Non Clustered Index
وبيتشغل بنفس الطريقة باختلاف بسيط.
فلو أنت عندك Database وعاوز تحسن من Query Performance بتاعك ممكن تشوف أنت بتبحث باي بالظبط
هل id ولا Name ولا Age وتعمل عليهم Index
هتقولي طيب ما أعمل علي كل الاعمدة Index وخلاص
هقولك ان كل Index بتعمله بياخد من Memory بتاعك.
مش بس كده في مشكلة تانيه
وأنك هتلاحظ بطئ في عميلة ال Insert أو ال Update
لانك بيحتاج انك تعمل maintenance لل Index ده ف كل مره
https://stackoverflow.com/questions/12915623/index-all-columns
وممكن تقرأ أكتر في اللينك ده عن ليه مينفعش
نعمل index for all columns
ودي طريقة من الطرق اللي ممكن نحسن بيها ال Performance بتاعت Query
إزاي فهم طريقة التخزين ممكن يخليني أحسن من ال Query اللي بعملها من حيث ال Performance.
في البداية أنت عملت جدول إسمه Employee وحطيت فيه بعض الاعمدة زي ال Id و ال Name وال Adress مثلا وخليت
ال Id ده يكون هو ال Primary Key
وخزنت ف الجدول ده مثلا 22 موظف.
الجدول ده بقا هيتخزن في ال Memory عندك علي شكل حاجه إسمها Data pages زي ما هو موضح بالصورة كده
وكل Data page بتكون حجمها 8 Kb
طيب أي شكل Tree اللي ظاهر في الصورة دي ؟
ببساطه أنت لما عملت Id وخليته Primary key
فبيتم إنشاء حاجه إسمها Clustered Index
وال Clusterd index ده بيخلي الداتا بتاعتك مترتبه بناءاً علي ال Id
وكمان بتكون علي شكل Tree بالشكل اللي انت شايفه ده
وبتكون كل نود بتشاور علي الي بعدها
والداتا بتاعت الموظف كامله بتكون موجوده اخر حاجه خالص
بالتالي لو حبيت تبحث عن الموظف الي ال Id بتاعه 11 مثلا
فأنت هتبدا من ال Tree من فوق خالص وتعدي علي ال Nodes كده ما هو موضع ف الصورة لحد ما تنزل في ال Range اللي أنت عاوزه
وتروح للData page اللي أنت متأكد ان الرقم اللي أنت بتبحث عنه موجود بداخلها وده بفضل ال Tree
هتروح لل Data Page تبحث جواها عم رقم 11 اللي أنت عاوزه
لكن كمان أنت مش هتبحث بشكل Linear لا
أنت كده كده ال Date page مترتبه فتقدر تعمل binary search بالتالي هتوصل أسرع وبتدا تقرأ ال Record اللي بتبحث عنه وترجعه.
بالتالي ك Performance ده كويس جداً
طيب لو كنت عمت الجدول بدون Primary key مكنش هيحصل Clustered Index ده بالتالي الداتا مش هتكون مترتبه بالتالي مش هتتخزن بالشكل ده وهيكون فيه عيوب كتير أبرزها
ال Performance أنت بقيت محتاج تعدي علي كلو لحد ما توصل لل Record اللي أنت عاوزه وده بيطلق عليه Table Scan.
طيب لو أنت عملت Primary key علي الId
لكن أنت للأسف بتبحث بال Age فأنت كده محتاج ال Tree بتاعتك تكون منظمه بس المره دي مش بال Id بس
لا بالAge علشان عملية ال Search تكون أسرع
فأنت هنا بقا بايدك تروح تعمل باردو Index علي ال Age بحيث
يشتغل بنفس طريقة ال Id
لكن ال Table بيكون فيه Clustered Index واحد فقط
فأنت هتعمل نوع تاني وهو Non Clustered Index
وبيتشغل بنفس الطريقة باختلاف بسيط.
فلو أنت عندك Database وعاوز تحسن من Query Performance بتاعك ممكن تشوف أنت بتبحث باي بالظبط
هل id ولا Name ولا Age وتعمل عليهم Index
هتقولي طيب ما أعمل علي كل الاعمدة Index وخلاص
هقولك ان كل Index بتعمله بياخد من Memory بتاعك.
مش بس كده في مشكلة تانيه
وأنك هتلاحظ بطئ في عميلة ال Insert أو ال Update
لانك بيحتاج انك تعمل maintenance لل Index ده ف كل مره
https://stackoverflow.com/questions/12915623/index-all-columns
وممكن تقرأ أكتر في اللينك ده عن ليه مينفعش
نعمل index for all columns
ودي طريقة من الطرق اللي ممكن نحسن بيها ال Performance بتاعت Query
7 أدوات ل Frontend لتصبح مطورًا أفضل
1- Uiverse
عبارة عن منصة مفتوحة المصدر تقدم مجموعة من عناصر واجهة المستخدم الجميلة التي تم إنشاؤها باستخدام CSS وTailwind.
--------------------------------
2-Figma Plugin: Motion
هو إضافة لبرنامج Figma بتبسط عملية إنشاء الرسوم المتحركة. الأداة دي بتخلي مطوري الواجهة الأمامية يقدروا يصمموا الرسوم المتحركة ويعملوا نماذج أولية مباشرة جوه Figma، من غير ما يحتاجوا للبرمجة المعقدة.
--------------------------------
3-CSSFX
يوفر مجموعة من الرسوم المتحركة CSS الجاهزة للاستخدام والتي يمكن دمجها بسهولة في أي مشروع ويب.
--------------------------------
4-Frontend Mentor
هي منصة ممتازة ل Frontend الذين يتطلعون عن تحسين مهاراتهم من خلال مشروعات واقعية.
--------------------------------
5- Greensock Animation Platform (GSAP)
هي مكتبة جافا سكريبت قوية لإنشاء رسوم متحركة عالية الأداء. يقدم GSAP مجموعة من الميزات، بما في ذلك الرسوم المتحركة السلسة والتوافق عبر المتصفحات.
--------------------------------
6-CodePen
هي بيئة تطوير اجتماعي لمطوري الواجهة الأمامية لعرض أعمالهم وتجربة التعليمات البرمجية واكتشاف الإلهام.
--------------------------------
7-Polypane
هو متصفح معمول مخصوص لمطورين ومصممي الويب. بتقدم ميزات زي التمرير المتزامن والمعاينات السريعة الاستجابة وفحص سهولة الوصول
--------------------------------
1- Uiverse
عبارة عن منصة مفتوحة المصدر تقدم مجموعة من عناصر واجهة المستخدم الجميلة التي تم إنشاؤها باستخدام CSS وTailwind.
--------------------------------
2-Figma Plugin: Motion
هو إضافة لبرنامج Figma بتبسط عملية إنشاء الرسوم المتحركة. الأداة دي بتخلي مطوري الواجهة الأمامية يقدروا يصمموا الرسوم المتحركة ويعملوا نماذج أولية مباشرة جوه Figma، من غير ما يحتاجوا للبرمجة المعقدة.
--------------------------------
3-CSSFX
يوفر مجموعة من الرسوم المتحركة CSS الجاهزة للاستخدام والتي يمكن دمجها بسهولة في أي مشروع ويب.
--------------------------------
4-Frontend Mentor
هي منصة ممتازة ل Frontend الذين يتطلعون عن تحسين مهاراتهم من خلال مشروعات واقعية.
--------------------------------
5- Greensock Animation Platform (GSAP)
هي مكتبة جافا سكريبت قوية لإنشاء رسوم متحركة عالية الأداء. يقدم GSAP مجموعة من الميزات، بما في ذلك الرسوم المتحركة السلسة والتوافق عبر المتصفحات.
--------------------------------
6-CodePen
هي بيئة تطوير اجتماعي لمطوري الواجهة الأمامية لعرض أعمالهم وتجربة التعليمات البرمجية واكتشاف الإلهام.
--------------------------------
7-Polypane
هو متصفح معمول مخصوص لمطورين ومصممي الويب. بتقدم ميزات زي التمرير المتزامن والمعاينات السريعة الاستجابة وفحص سهولة الوصول
--------------------------------
⚡ Fake Filler ⚡
إضافة على قوقل كروم تساعدك زيادة إنتاجيتك و تكسبك وقت كمبرمج 🚀
هده الإضافة تسمح لك بملء كل ال form اللي لديك بضغطة زر واحدة ببيانات وهمية.
الرابط : https://chromewebstore.google.com/detail/fake-filler/bnjjngeaknajbdcgpfkgnonkmififhfo?pli=1
إضافة على قوقل كروم تساعدك زيادة إنتاجيتك و تكسبك وقت كمبرمج 🚀
هده الإضافة تسمح لك بملء كل ال form اللي لديك بضغطة زر واحدة ببيانات وهمية.
الرابط : https://chromewebstore.google.com/detail/fake-filler/bnjjngeaknajbdcgpfkgnonkmififhfo?pli=1
شوية مصادر مجانية تقدروا تستخدموها لو حد عاوز يعمل ابليكشن اسلامي. سواء كان التطبيق بتاعك بيحتاج مواقيت الصلاة، تحويل التاريخ الهجري، أو نصوص القرآن الكريم، هتلاقي هنا اللي انت محتاجه!
📌**Api شامل** : https://documenter.getpostman.com/view/7929737/TzkyMfPc
📌 Aladhan Prayer Times API: عشان تعرف مواقيت الصلاة لأي مكان.
🔗 [Aladhan API]( https://aladhan.com/prayer-times-api)
📌 IslamicFinder API: عشان مواقيت الصلاة، التقويم الهجري، وموارد قرآنية.
🔗 [IslamicFinder API]( https://www.islamicfinder.us/index.php/api/)
📌 Quran API: نصوص وترجمات القرآن الكريم مع الصوتيات.
🔗 [Quran API]( https://alquran.cloud/api)
📌 Hijri Date API: تحويل التاريخ من الميلادي للهجري والعكس.
🔗 [Hijri Date API]( https://hijriapi.com/)
📌 Muslim Salat API: مواقيت الصلاة مع موارد إسلامية أخرى.
🔗 [Muslim Salat API]( https://muslimsalat.com/)
📌 Hadith API: عشان توصل لمجموعة الأحاديث.
🔗 [Hadith API]( https://api.sunnah.com/)
📌 Tanzil.net API: نصوص وترجمات القرآن مع التلاوات.
🔗 [ Tanzil.net API]( http://tanzil.net/docs/api)
📌**Api شامل** : https://documenter.getpostman.com/view/7929737/TzkyMfPc
📌 Aladhan Prayer Times API: عشان تعرف مواقيت الصلاة لأي مكان.
🔗 [Aladhan API]( https://aladhan.com/prayer-times-api)
📌 IslamicFinder API: عشان مواقيت الصلاة، التقويم الهجري، وموارد قرآنية.
🔗 [IslamicFinder API]( https://www.islamicfinder.us/index.php/api/)
📌 Quran API: نصوص وترجمات القرآن الكريم مع الصوتيات.
🔗 [Quran API]( https://alquran.cloud/api)
📌 Hijri Date API: تحويل التاريخ من الميلادي للهجري والعكس.
🔗 [Hijri Date API]( https://hijriapi.com/)
📌 Muslim Salat API: مواقيت الصلاة مع موارد إسلامية أخرى.
🔗 [Muslim Salat API]( https://muslimsalat.com/)
📌 Hadith API: عشان توصل لمجموعة الأحاديث.
🔗 [Hadith API]( https://api.sunnah.com/)
📌 Tanzil.net API: نصوص وترجمات القرآن مع التلاوات.
🔗 [ Tanzil.net API]( http://tanzil.net/docs/api)
تلخيص SQL تقديم إجابات موجزة توفر فهماً أساسياً للموضوعات المختلفة
يعني ايه temp table في sql وايه فايدته؟
وايه انواعه؟
من اسمه كده temporary يعني حاجه مؤقتة
بيتكريت جوا داتابيز اسمها temp table بيكون موجود عندي في الميموري بشكل مؤقت بيتمسح اول مالسيشن بتاعتي تقفل او اخر connection بيأكسس الtable دا يقفل
امتى بستخدمه
بستخدمه لما احتاج احفظ جواه داتا بشكل مؤقت بستخدمها as input at another query
ازاي بستخدمه؟
بضيف # قبل اسم الtable
انواعه؟
1- Local temp table
2- Global temp table
ايه الفرق بينهم؟
الـ local بيكون على مستوى السيشن بتاعتي
اول مالسيشن بتخلص بيتمسح
بستخدمه ب ان احط # قبل الtable
Create Table #TableName
الـ global بيكون على مستوى الداتابيز
يعني انا واي user تاني اقدر استخدمه
طيب بيتمسح امتى ؟
لما اخر Connection يتقفل
يعني لو انا بستخدمه وuser تاني بيستخدمه وجيت انا قفلت هيفضل موجود عادي
هيقفل فقط في حاله ان اخر connection يقفل الاكسس بتاعته وقتها هيتمسح من الميموري
بكتبه ازاي؟
بحط ## قبل اسم الTable
Create Table ##TableName
منقول من
https://www.linkedin.com/posts/aliaa-ali-gabr_tablename-tablename-activity-7224466255594831873-514h?utm_source=share&utm_medium=member_ios
وايه انواعه؟
من اسمه كده temporary يعني حاجه مؤقتة
بيتكريت جوا داتابيز اسمها temp table بيكون موجود عندي في الميموري بشكل مؤقت بيتمسح اول مالسيشن بتاعتي تقفل او اخر connection بيأكسس الtable دا يقفل
امتى بستخدمه
بستخدمه لما احتاج احفظ جواه داتا بشكل مؤقت بستخدمها as input at another query
ازاي بستخدمه؟
بضيف # قبل اسم الtable
انواعه؟
1- Local temp table
2- Global temp table
ايه الفرق بينهم؟
الـ local بيكون على مستوى السيشن بتاعتي
اول مالسيشن بتخلص بيتمسح
بستخدمه ب ان احط # قبل الtable
Create Table #TableName
الـ global بيكون على مستوى الداتابيز
يعني انا واي user تاني اقدر استخدمه
طيب بيتمسح امتى ؟
لما اخر Connection يتقفل
يعني لو انا بستخدمه وuser تاني بيستخدمه وجيت انا قفلت هيفضل موجود عادي
هيقفل فقط في حاله ان اخر connection يقفل الاكسس بتاعته وقتها هيتمسح من الميموري
بكتبه ازاي؟
بحط ## قبل اسم الTable
Create Table ##TableName
منقول من
https://www.linkedin.com/posts/aliaa-ali-gabr_tablename-tablename-activity-7224466255594831873-514h?utm_source=share&utm_medium=member_ios