"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > الحد من العلاقات المحملة حريصة على نماذج Laravel

الحد من العلاقات المحملة حريصة على نماذج Laravel

تم النشر بتاريخ 2024-11-07
تصفح:261

Limit Eager Loaded Relationships on Laravel Models

مقدمة

في بعض الأحيان عندما تكون متشوقًا لتحميل العلاقات على نماذج Laravel، قد ترغب في تحديد عدد النماذج ذات الصلة التي يتم إرجاعها.

على سبيل المثال، في منصة التدوين، قد ترغب في تحميل كل مؤلف في النظام بالإضافة إلى ثلاثة من مشاركاته.

في الإصدارات الأقدم من Laravel، كان الحد من العلاقات المحملة المتلهفة بمثابة مهمة صعبة بعض الشيء. لم أتمكن أبدًا من العثور على طريقة أنيقة للقيام بذلك وشعرت أنها صحيحة. لذلك عادةً ما أقوم بتثبيت حزمة staudenmeir/eloquent-eager-limit الخاصة بـ Jonas Staudenmeir (@staudenmeir) والتي تضيف هذه الوظيفة.

ومع ذلك، في بداية هذا العام، تم دمج الوظيفة الأساسية لهذه الحزمة في إطار عمل Laravel نفسه. وهذا يعني أنه في Laravel 11، يمكننا الحد من العلاقات المحملة المتلهفة دون الحاجة إلى تثبيت أي حزم إضافية.

دعونا نلقي نظرة على مثال.

الحد من العلاقات المحملة حريصة في Laravel

لنفترض أن لدينا منصة للتدوين ونريد تحميل كل مؤلف في النظام بالإضافة إلى ثلاث منشوراته.

يمكننا تحقيق ذلك باستخدام طريقة الحد في استعلام التحميل المتحمس:

use App\Models\Post;
use App\Models\Author;
use Illuminate\Contracts\Database\Eloquent\Builder;

$authors = Author::query()
    ->with([
        'posts' => fn (Builder $query): Builder => $query->limit(3),
    ])
    ->get();

كما نرى في مثال الكود أعلاه، فقد حددنا أننا نريد تحميل علاقة المنشورات بشغف على نموذج App\Models\Author. في استعلام التحميل المتلهف، استخدمنا طريقة الحد لتحديد أننا نريد تحميل ثلاث مشاركات فقط.

استعلامات SQL الأساسية

لأي شخص مهتم، سيؤدي الاستعلام أعلاه إلى إنشاء استعلامين SQL.

الاستعلام الأول يجلب المؤلفين من قاعدة البيانات:

SELECT * FROM `authors`

الاستعلام الثاني يجلب المشاركات الثلاثة لكل مؤلف (بافتراض أن لدينا 5 مؤلفين في النظام):

SELECT *
FROM
    (
        SELECT
            *,
            row_number() OVER (PARTITION BY `posts`.`author_id`) AS `laravel_row`
        FROM `posts`
        WHERE `posts`.`author_id` IN (1, 2, 3, 4, 5)
    ) AS `laravel_table`
WHERE `laravel_row` 



مزيد من القراءة

إذا استمتعت بقراءة هذا المنشور، فقد تكون مهتمًا بمراجعة كتابي الإلكتروني المؤلف من 220 صفحة "Battle Ready Laravel" والذي يغطي موضوعات مماثلة بمزيد من التعمق.

أو قد ترغب في الاطلاع على كتابي الإلكتروني الآخر المكون من 440 صفحة "استهلاك واجهات برمجة التطبيقات في Laravel" والذي يعلمك كيفية استخدام Laravel لاستهلاك واجهات برمجة التطبيقات من الخدمات الأخرى.

إذا كنت مهتمًا بالحصول على التحديثات في كل مرة أقوم فيها بنشر مشاركة جديدة، فلا تتردد في الاشتراك في النشرة الإخبارية الخاصة بي.

استمر في بناء أشياء رائعة! ?

بيان الافراج يتم استنساخ هذه المقالة على: https://dev.to/ashallendesign/limit-eager-dload-relationships-on-laravel-models-4c43؟1 إذا كان هناك أي انتهاك ، فيرجى الاتصال بـ [email protected] لحذفه.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3