В приведенном вами примере данные отношений «загружаются лениво», а не «загружены нетерпеливо». Это означает, что данные отношения фактически не загружаются, пока вы не получите первый доступ к свойству.
Однако Eloquent может «загружать» отношения во время запроса родительской модели. Стремительная загрузка облегчает проблему запроса N + 1.
Чтобы загружать отношения, вы можете использовать eloquent with()
метод:
$posts = Post::published()->with('author')->get();
Теперь каждый post
будет загружен с помощью модели author
, таким образом, избегая N + 1 проблема.
Вы также можете указать, хотите ли вы активировать загрузку только для указанных c столбцов:
$posts = Post::published()->with('author:id,name')->get();
И хотите ли вы всегда загружать отношения при получении модели Вы можете определить $ со свойством для модели:
class Post extends Model
{
/**
* The relationships that should always be loaded.
*
* @var array
*/
protected $with = ['author'];
/**
* Get the author that wrote the book.
*/
public function author()
{
return $this->belongsTo('App\Author');
}
}
Дополнительная информация: https://laravel.com/docs/6.x/eloquent-relationships#eager -загрузка