offline version v3
Запись на курсы по HTML, CSS, JavaScript, PHP, фреймворкам и CMS,
а также: помощь в поиске работы и заказов, стажировка на реальных проектах→
⊗pplrPmMRMTM 134 of 194 menu

Связь многие ко многим в 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. Получите всех роли вместе с их юзерами.