Пусть каждый пост может принадлежать нескольким категориям. В этом случае они будут связаны через промежуточную таблицу связи.
Давайте посмотрим на структуру таблиц. Таблица с постами:
posts
- id
Таблица с категориями:
category
- id
Таблица связи:
category_post
- id
- post_id
Первая связь
Каждый пост принадлежит многим
категориям. Давайте пропишем
эту связь через отношение
belongsToMany
:
<?php
class Post extends Model
{
public function categories()
{
return $this->belongsToMany(Category::class);
}
}
?>
Получим пост вместе с его категориями:
<?php
class PostController extends Controller
{
public function show()
{
$post = Post::find(1);
dump($post->categories);
}
}
?>
Вторая связь
Каждая категория принадлежит многим
постам. Давайте пропишем эту связь
через отношение belongsToMany
:
<?php
class Category extends Model
{
public function posts()
{
return $this->belongsToMany(Post::class);
}
}
?>
Получим категорию вместе с ее постами:
<?php
class CategoryController extends Controller
{
public function show()
{
$category = Category::find(1);
dump($category->posts);
}
}
?>
Практические задачи
Пусть у нас есть юзеры и их роли. Каждый юзер может иметь много ролей. Даны соответствующие таблицы:
users
- id
roles
- id
Создайте для указанных таблиц таблицу связи.
Свяжите юзеров с ролями отношением
belongsToMany
. Получите всех
юзеров вместе с их ролями.
Свяжите роли с юзерами отношением
belongsToMany
. Получите всех
роли вместе с их юзерами.