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

← →
↑