Связь многие ко многим в Laravel

Пусть каждый пост может принадлежать нескольким категориям. В этом случае они будут связаны через промежуточную таблицу связи.

Давайте посмотрим на структуру таблиц. Таблица с постами:

$tastr$> posts id title -tastr->

Таблица с категориями:

$tastr$> category id name -tastr->

Таблица связи:

$tastr$> category_post id post_id category_id -tastr->

Первая связь

Каждый пост принадлежит многим категориям. Давайте пропишем эту связь через отношение 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); } } ?>

Практические задачи

Пусть у нас есть юзеры и их роли. Каждый юзер может иметь много ролей. Даны соответствующие таблицы:

$tastr$> users id name -tastr->
$tastr$> roles id name -tastr->

Создайте для указанных таблиц таблицу связи.

Свяжите юзеров с ролями отношением belongsToMany. Получите всех юзеров вместе с их ролями.

Свяжите роли с юзерами отношением belongsToMany. Получите всех роли вместе с их юзерами.



Чат с GPT Компилятор