به صورت پیش فرض ... دسترسی به داده ها در الکوئنت "Lazy loaded" هست.
یعنی وقتی از الکوئنت به شکل زیر استفاده میکنی:
$posts = Post:all();
کوئری که لاراول میسازه به این شکله:
select * from `posts`
حالا فرض کن این مدل پست یه رابطه (Relationship) از نوع belongsTo داره به مدل Category ..
foreach ($posts as $post) {
echo $post->category->name; // لیزی لود همینه
}
مشکل این لیزی لود اینه که.. به ازای هر یک پست که در دیتابیس وجود داره یک کوئری بوجود میاد. مثلا اگر ۴۰ تا پست توی جدول داشته باشیم: تعداد کوئری که با همون یک خط بالا بوجود میاد برابر با ۴۰ + ۱ هست.
به این داستان مشکل N + 1 هم میگن.
برای همین توصیه میشه به جای اینکار (استفاده از لیزی لودینگ) از Eager-Loading استفاده بشه..
@ali.bayat
اون Eager-Loading چطوریه ؟
شاید پاسخ شما همینجا باشد
اطلاعات بیشتر در مقاله زیر:
https://medium.com/@kouipheng.lee/laravel-eloquent-lazy-vs-eager-loaded-803852c59e1c