Условия в связи один ко многим в Laravel

Можно добавлять дополнительные условия при получении связанных данных. Давайте посмотрим, как это делается. Пусть у нашей таблицы с постами будет также и поле likes, содержащее количество лайков:

posts

  • id
  • title
  • likes

Давайте для начала получим категорию вместе с коллекцией ее постов:

<?php class CategoryController extends Controller { public function show() { $posts = Category::find(1)->posts; dump($posts); } } ?>

Теперь заменим свойство posts на метод posts(). В этом случае метод своим результатом вернет построитель запросов:

<?php class CategoryController extends Controller { public function show() { $qb = Category::find(1)->posts(); dump($qb); } } ?>

Так как возвращается построитель запросов, то мы можем дальше продолжить цепочку, к примеру, наложив некоторое условие на получаемые посты:

<?php class CategoryController extends Controller { public function show() { $posts = Category::find(1) ->posts() ->where('likes', '>', 10) ->get(); dump($posts); } } ?>

Сделайте следующие таблицы:

cities

  • id
  • name
  • population

countries

  • id

Свяжите таблицу countries с таблицей cities отношением hasMany.

Получите все страны вместе с их городами, население в которых больше 100 тысяч.

Получите все страны вместе с их городами. Города каждой страны отсортируйте по возрастанию населения.