تم تصميم طريقة `عند تحميلها () في لارافيل خصيصًا للعمل مع علاقات النموذج البليغة. ويتضمن بشرط بيانات العلاقة في استجابات موارد API فقط إذا كانت العلاقة حريصة على تحميلها على النموذج البليغ. تساعد هذه الطريقة في تجنب استعلامات قاعدة البيانات غير الضرورية وتحافظ على استجابات API من خلال تضمين البيانات ذات الصلة فقط عندما يتم تحميلها بالفعل.
سياق الاستخدام لـ `عند التحميل ()`
- النماذج والعلاقات البليغة: `عند التحميل ()` تتحقق مما إذا كانت العلاقة على نموذج بليغ قد تم تحميلها باستخدام طرق مثل `` أو `أو` load () `. إذا تم تحميل العلاقة ، فإنها تُرجع البيانات ذات الصلة ؛ خلاف ذلك ، فإنه لا يعيد أي شيء أو قيمة افتراضية. يقترن هذا السلوك بإحكام بالطريقة الداخلية للبلاغة `العلاقة ()" التي تحدد ما إذا كانت بيانات العلاقة متوفرة على مثيل النموذج [1] [7] [8].
- موارد API: يتم استخدامها بشكل شائع داخل فئات موارد API Laravel لتشمل الموارد أو المجموعات ذات الصلة بشكل مشروط بناءً على ما إذا كانت العلاقات حريصة على تحميلها ، وتحسين الأداء وتجنب مشكلة الاستعلام N+1 [1] [8].
هل يمكن استخدام `عند التحميل ()` مع مكتبات الطرف الثالث؟
- لا يوجد دعم مباشر خارج النماذج البليغة: نظرًا لأن `عندما يتم تحميل ()` يعتمد على الحالة الداخلية للنموذج البليغ للتحقق مما إذا كانت العلاقة تم تحميلها (`melected ()` method) ، فهي مصممة بطبيعتها للنماذج البليغة وعلاقاتها. لا يمكن لمكتبات الطرف الثالث التي لا تمتد أو تحاكي النماذج البليغة وآليات تحميل العلاقات الخاصة بها استخدام "عند التحميل ()`.
-الحلول: إذا قامت مكتبة طرف ثالث بإرجاع الكائنات أو المجموعات التي ليست نماذج بليغة ، فلا يمكنك استخدام `عند التحميل ()` as-is. ستحتاج إلى تنفيذ منطق مشروط مماثل يدويًا أو لف تلك الكائنات في مورد مخصص يحاكي السلوك. بدلاً من ذلك ، يمكنك التحقق يدويًا ما إذا كانت البيانات ذات الصلة موجودة قبل تضمينها في الاستجابة.
ملخص
- `عندما يتم تحميلها ()" للعمل بشكل حصري مع النماذج البليغة وعلاقاتها المحملة.
- يعتمد ذلك على حالة تحميل العلاقة الداخلية للبلاغة ، لذلك لا يمكن استخدامها مباشرة مع مكتبات الطرف الثالث التي لا تستخدم نماذج بليغة.
- لتضمين البيانات ذات الصلة بشكل مشروط من مصادر الطرف الثالث ، يجب عليك تنفيذ الشيكات الشرطية الخاصة بك أو أغلفة الموارد.
هذا يجعل `عند التحميل ()" أداة قوية لتحسين استجابات API لارافيل ولكنها تقتصر على سياق ORM البليغ [1] [7] [8].
الاستشهادات:
[1] https://henestrosa.dev/blog/how-to-use-whenloaded-in-laravel-api-resources
[2] https://laracasts.com/discuss/channels/laravel/api- resource-using-count-with-whenloaded
[3] https://laravel.com/docs/12.x/eloquent-resources
[4] https://stackoverflow.com/questions/76828050/how-to-get-a-single-field-from-a-laravel-whenloaded-roaded-resource
[5] https://www.youtube.com/watch؟v=LS7M14ECASU
[6] https://stackoverflow.com/questions/66675594/can-i- use-instead-load-laravel-eloquent
[7] https://laraveldaily.com/post/laravel-api-resources-relations-when-methods
[8] https://laravel-news.com/whended