Можно добавлять дополнительные условия
при получении связанных данных.
Давайте посмотрим, как это делается.
Пусть у нашей таблицы с постами
будет также и поле 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
тысяч.
Получите все страны вместе с их городами. Города каждой страны отсортируйте по возрастанию населения.