Жадная загрузка по умолчанию в Laravel

Иногда требуется постоянная загрузка некоторых отношений при извлечении модели. Для этого нужно определить свойство $with в модели.

Для примера давайте сделаем так, чтобы категории всегда загружались вместе со своими постами:

app/Models/Category.php<?php
  class Category extends Model
  {
    protected $with = ['posts'];
    
    public function posts()
    {
      return $this->hasMany(Post::class);
    }
  }
?>

Теперь при переборе постов лишнего запроса не будет:

app/Http/Controllers/CategoryController.php<?php
  class CategoryController extends Controller
  {
    public function show()
    {
      $category = Category::find(1);
      
      foreach ($category->posts as $post) {
        dump($post); // лишнего запроса не будет
      }
    }
  }
?>
добавить еще условия: $category = Category::find(2); // Загружает с постами (из-за $with) // Фильтруем уже загруженные посты (БЕЗ нового запроса!) $posts = $category->posts->where('id', '>', 2); dump($posts);