احمد مصطفى14 نشر 30 مايو 2023 أرسل تقرير مشاركة نشر 30 مايو 2023 (معدل) ما هو الفرق بين load و with في لارافيل مع التوضيع بمثال ان امكن شكرا تم التعديل في 30 مايو 2023 بواسطة Mustafa Suleiman تعديل عنوان السؤال 1 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 عمر قره محمد نشر 30 مايو 2023 أرسل تقرير مشاركة نشر 30 مايو 2023 هنا مثال يوضح الفرق بين استخدام `with` و `load` في لارفل: // استخدام with $users = User::with('comments')->get(); // هذا يحمل جميع المستخدمين وتعليقاتهم في استعلام واحد // استخدام load $users = User::all(); // هذا يحمل جميع المستخدمين في الاستعلام الأول $users = $users->load('comments'); // هذا يحمل تعليقات المستخدمين في الاستعلام الثاني في المثال أعلاه، يتم استخدام `with` لتحميل جميع المستخدمين وتعليقاتهم في استعلامين فقط. بالمقابل، يتم استخدام `load` لتحميل المستخدمين أولاً، ثم تحميل تعليقاتهم في وقت لاحق. و لقد تم الاجابة على سؤالك سابقاً هنا : اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 Mustafa Suleiman نشر 30 مايو 2023 أرسل تقرير مشاركة نشر 30 مايو 2023 كلاً من load و with هما وظيفتان تستخدمان في التعامل مع العلاقات بين النماذج (Models) في قاعدة البيانات. 1- load تُستخدم لتحميل العلاقات المرتبطة (Eager Loading) مع نموذج محدد، وعندما تقوم بتحميل العلاقات، يتم استعادة البيانات المرتبطة مسبقًا من قاعدة البيانات وتعيينها مع النموذج الأصلي. مثلاً، لنفترض أن لدينا نموذجين User و Post، وبينهما علاقة "المستخدم لديه العديد من المنشورات" (User has many posts)، واستخدام load لتحميل المنشورات المرتبطة بمستخدم معين عند الحاجة. إليك مثالًا: $user = User::find(1); $user->load('posts'); وفيه يتم تحميل المنشورات المرتبطة بالمستخدم ذو الهوية 1 من قاعدة البيانات وتخزينها في النموذج. 2- with تُستخدم لتحميل العلاقات المرتبطة (Eager Loading) مع الاستعلام الأساسي، وتساعد في تقليل عدد استعلامات قاعدة البيانات المنفصلة التي يتم إجراؤها عند الوصول إلى العلاقات. بمعنى إذا كنت تريد استرداد قائمة المستخدمين مع منشوراتهم، تستطيع استخدام with لتحميل العلاقة في نفس الاستعلام. مثال: $users = User::with('posts')->get(); يتم استرداد قائمة المستخدمين من قاعدة البيانات مع تحميل المنشورات المرتبطة بهم. أي تستخدم load عندما تحتاج إلى تحميل العلاقات بشكل فردي لنموذج محدد، بينما يُفضل استخدام with عندما تحتاج إلى تحميل العلاقات مع الاستعلام الأساسي للاستفادة من التحميل المسبق وتقليل استعلامات قاعدة البيانات. اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 عبدالباسط ابراهيم نشر 30 مايو 2023 أرسل تقرير مشاركة نشر 30 مايو 2023 كلا الأساليب تحقق نفس النتائج، وهي تحميل نموذج ذي صلة على النموذج الأول. في الواقع، كلاهما يقومان بتشغيل نفس الاستعلامين. الفرق الرئيسي هو أن with() يحمل النموذج ذي الصلة مسبقًا، فوريًا بعد الاستعلام الأول (all ()، first ()، أو find (x)، على سبيل المثال)؛ عند استخدام load()، تقوم بتشغيل الاستعلام الأول أولاً، ثم تحميل النموذج ذي الصلة في وقت لاحق. "التحميل الفوري" هنا يعني أننا نربط جميع النماذج ذات الصلة لمجموعة نتائج معينة باستخدام استعلامة واحدة فقط، بدلاً من الحاجة إلى تشغيل n استعلامات، حيث n هو عدد العناصر في المجموعة الأولية. يمكن استخدام with() للتحميل الفوري على سبيل المثال، إذا استخدمنا with() للتحميل الفوري: $users = User::with('comments')->get(); ... إذا كان لدينا 5 مستخدمين، يتم تشغيل الاستعلامين التاليين على الفور: select * from `users` select * from `comments` where `comments`.`user_id` in (1، 2، 3، 4، 5) ... وننتهي بمجموعة من النماذج التي تحتوي على التعليقات المرتبطة بنموذج المستخدم، لذلك يمكننا القيام بشيء مثل $users->comments->first()->body. يمكن استخداما باستخدام load()، يمكننا فصل الاستعلامين، أولاً عن طريق الحصول على النتيجة الأولية: $users = User::all(); الذي يشغل: select * from `users` وفي وقت لاحق، إذا قررنا أننا بحاجة إلى التعليقات ذات الصلة لجميع هؤلاء المستخدمين، يمكننا تحميلها في وقت لاحق: $users = $users->load('comments'); الذي يشغل الاستعلام الثاني: select * from `comments` where `comments`.`user_id` in (1، 2، 3، 4، 5) ونحن ننتهي بنفس النتيجة، مقسمة إلى خطوتين. مرة أخرى، يمكننا استدعاء $users->comments->first()->body للوصول إلى النموذج ذي الصلة لأي عنصر. لماذا استخدام load() مقابل with()؟ يمنحك load() خيار تحديد ذلك لاحقًا، بناءً على بعض الشروط الديناميكية، سواء كنت تحتاج إلى تشغيل الاستعلام الثاني أم لا. إذا كان لا شك في أنك ستحتاج إلى الوصول إلى جميع العناصر ذات الصلة، استخدم with(). البديل لكل من with() و load() هو التكرار عبر مجموعة النتائج الأولية والاستعلام عن العلاقة hasMany() لكل عنصر. هذا سيؤدي إلى تشغيل n+1 استعلامات، أو 6 في هذا المثال. التحميل الفوري، بغض النظر عما إذا تم تنفيذه مباشرة باستخدام with() أو في وقت لاحقًا باستخدام load()، يشغل 2 استعلامات فقط. اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
السؤال
احمد مصطفى14
ما هو الفرق بين load و with في لارافيل
تم التعديل في بواسطة Mustafa Suleimanمع التوضيع بمثال ان امكن
شكرا
تعديل عنوان السؤال
رابط هذا التعليق
شارك على الشبكات الإجتماعية
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.