Связь один ко многим через в Laravel
Связь один ко многим через нужна,
когда конечные записи доступны через
промежуточную таблицу. Для этого используют
метод hasManyThrough.
Пусть есть категории, посты и комментарии. Категория имеет много постов, пост - много комментариев. Комментарии категории можно получить через посты:
categories
- id
- name
posts
- id
- title
- category_id
comments
- id
- text
- post_id
В модели категории:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
public function comments()
{
return $this->hasManyThrough(
Comment::class,
Post::class
);
}
}
?>
Первый параметр - конечная модель (комментарии), второй - промежуточная (посты). Получение данных:
<?php
$category = Category::find(1);
$comments = $category->comments;
foreach ($comments as $comment) {
echo $comment->text;
}
?>
Сделайте таблицы countries,
users и posts.
Свяжите страну со всеми постами
её юзеров через hasManyThrough.
Выведите все посты выбранной страны через отношение.