مركز التطوير | DevHub

حل مشكلة استعلامات N+1 في Laravel 11 مع chaperone()

في مؤتمر Laracon US 2024، تم الإعلان عن واحدة من الميزات الرئيسية لـ Laravel 11، وهي علاقات Eloquent بواسطة Chaperone، المصممة لحل مشكلة استعلامات N+1 الشائعة التي تؤثر على أداء التطبيقات.

تقدم هذه الميزة طريقة جديدة تدعى chaperone() في ORM Eloquent في Laravel، مما يسمح بربط النماذج ذات الصلة تلقائيًا بالنماذج الرئيسية بعد تشغيل استعلام العلاقة. في الأساس، تعمل طريقة chaperone() على تحسين استعلامات قاعدة البيانات من خلال التأكد من تحميل العلاقات بكفاءة، مما يقلل من الحاجة إلى استعلامات إضافية عند الوصول إلى البيانات المرتبطة.


كيفية عملها

في السابق، يمكن أن يؤدي استعلام البيانات المرتبطة في مجموعات البيانات الكبيرة إلى عدة استعلامات غير ضرورية، خاصة عند التكرار عبر النماذج المرتبطة. على سبيل المثال، قد يؤدي استرداد منشورات المستخدم ثم الوصول إلى المستخدم لكل منشور إلى تشغيل استعلامات زائدة.

مثال بدون chaperone():

laravel
$users = User::with('posts')->get();
 
foreach ($users as $user) {
    foreach ($user->posts as $post) {
        echo $post->user->name;
    }
}


مع طريقة chaperone() الجديدة، يمكنك الآن كتابة:

laravel
public function posts(): HasMany {
    return $this->hasMany(Post::class)->chaperone();
}


هذا يضمن تحميل النماذج المرتبطة (مثل المنشورات) في استعلام محسن، مما يمنع تدهور الأداء.

تعد طريقة chaperone() تحسينًا كبيرًا للتطبيقات التي تتعامل مع علاقات البيانات المعقدة، خاصة في البيئات ذات الأداء العالي. من خلال حل مشكلة N+1، تساعد هذه الميزة تطبيقات Laravel على التوسع بشكل أفضل والاستجابة بشكل أسرع.

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

المراجع

laravel magazine

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *