BelongsToMany
класс BelongsToMany расширяет Relation (View source)
Трейты
| InteractsWithPivotTable |
| Macroable |
Свойства
| статический защищенный массив | $macros | Зарегистрированные строковые макросы. | из Macroable |
| защищенный Builder | $query | Экземпляр Eloquent-строителя запросов. | из Relation |
| защищенный Model | $parent | Экземпляр родительской модели. | из Relation |
| защищенный Model | $related | Экземпляр связанной модели. | из Relation |
| статический защищенный булево значение | $constraints | Указывает, добавляет ли отношение ограничения. | из Relation |
| статический массив | $morphMap | Массив для сопоставления имен классов с их именами морфизма в базе данных. | из Relation |
| защищенный строка | $table | Промежуточная таблица для отношения. | |
| защищенный строка | $foreignPivotKey | Внешний ключ родительской модели. | |
| защищенный строка | $relatedPivotKey | Связанный ключ отношения. | |
| защищенный строка | $parentKey | Имя ключа родительской модели. | |
| защищенный строка | $relatedKey | Имя ключа связанной модели. | |
| защищенный строка | $relationName | Имя отношения. | |
| защищенный массив | $pivotColumns | Столбцы промежуточной таблицы для извлечения. | |
| защищенный массив | $pivotWheres | Любые ограничения промежуточной таблицы для условий where. | |
| защищенный массив | $pivotWhereIns | Любые ограничения промежуточной таблицы для условий whereIn. | |
| защищенный массив | $pivotValues | Значения по умолчанию для столбцов промежуточной таблицы. | |
| булево значение | $withTimestamps | Указывает, доступны ли отметки времени в промежуточной таблице. | |
| защищенный строка | $pivotCreatedAt | Пользовательский столбец промежуточной таблицы для метки времени created_at. | |
| защищенный строка | $pivotUpdatedAt | Пользовательский столбец промежуточной таблицы для метки времени updated_at. | |
| защищенный строка | $using | Имя класса пользовательской модели pivot для использования в отношении. | |
| защищенный строка | $accessor | Имя аксессора для использования для отношения «pivot». | |
| статический защищенный целое число | $selfJoinCount | Количество самосоединений. |
Методы
| static void | macro(string $name, object|callable $macro) Зарегистрировать пользовательское макро. | from Macroable |
| static void | mixin(object $mixin) Смешать другой объект в класс. | from Macroable |
| static bool | hasMacro(string $name) Проверяет, зарегистрировано ли макро. | from Macroable |
| static mixed | __callStatic(string $method, array $parameters) Динамически обрабатывать вызовы класса. | from Macroable |
| mixed | __call(string $method, array $parameters) Динамически обрабатывать вызовы класса. | from Macroable |
| void | __construct(Builder $query, Model $parent, string $table, string $foreignPivotKey, string $relatedPivotKey, string $parentKey, string $relatedKey, string $relationName = null) Создать новый экземпляр связи "многие ко многим". | |
| static mixed | noConstraints(Closure $callback) Выполнить обратный вызов без ограничений в связи. | from Relation |
| void | addConstraints() Установить базовые ограничения для запроса связи. | |
| void | addEagerConstraints(array $models) Установить ограничения для жадного загрузки связи. | |
| array | initRelation(array $models, string $relation) Инициализировать связь на наборе моделей. | |
| array | match(array $models, Collection $results, string $relation) Сопоставить загруженные результаты с их родителями. | |
| mixed | getResults() Получить результаты связи. | |
| Collection | getEager() Получить связь для жадной загрузки. | from Relation |
| Collection | get(array $columns = ['*']) Выполнить запрос как «выбрать» оператор. | |
| void | touch() Обновить все связанные модели для связи. | |
| int | rawUpdate(array $attributes = []) Выполнить сырое обновление базового запроса. | from Relation |
| Builder | getRelationExistenceCountQuery(Builder $query, Builder $parentQuery) Добавить ограничения для запроса подсчёта связи. | from Relation |
| Builder | getRelationExistenceQuery(Builder $query, Builder $parentQuery, array|mixed $columns = ['*']) Добавить ограничения для запроса связи. | |
| array | getKeys(array $models, string $key = null) Получить все первичные ключи для массива моделей. | from Relation |
| Builder | getQuery() Получить базовый запрос для связи. | from Relation |
| Builder | getBaseQuery() Получить базовый билдер запроса, управляющий билдером Eloquent. | from Relation |
| Model | getParent() Получить родительскую модель связи. | from Relation |
| string | getQualifiedParentKeyName() Получить полностью квалифицированное имя родительского ключа для связи. | |
| Model | getRelated() Получить связанную модель связи. | from Relation |
| string | createdAt() Получить имя столбца «создано в». | |
| string | updatedAt() Получить имя столбца «обновлено в». | |
| string | relatedUpdatedAt() Получить имя столбца «обновлено в» связанной модели. | from Relation |
| static array | morphMap(array $map = null, bool $merge = true) Установить или получить карту morph для полиморфных связей. | from Relation |
| static array|null | buildMorphMapFromModels(array $models = null) Создаёт таблично-ключевой массив из имён классов моделей. | from Relation |
| static string|null | getMorphedModel(string $alias) Получить модель, связанную с пользовательским полиморфным типом. | from Relation |
| void | __clone() Принудительно клонировать базовый билдер запроса при клонировании. | from Relation |
| array | toggle(mixed $ids, bool $touch = true) Переключает модель (или модели) из родительской. | from InteractsWithPivotTable |
| array | syncWithoutDetaching(Collection|Collection|array $ids) Синхронизировать промежуточные таблицы со списком идентификаторов без отсоединения. | from InteractsWithPivotTable |
| array | sync(Collection|Collection|array $ids, bool $detaching = true) Синхронизировать промежуточные таблицы со списком идентификаторов или коллекцией моделей. | from InteractsWithPivotTable |
| array | formatRecordsList(array $records) Отформатировать список записей синхронизации/переключения, чтобы он был индексирован по идентификатору. | from InteractsWithPivotTable |
| array | attachNew(array $records, array $current, bool $touch = true) Прикрепить все записи, которых нет в заданных текущих записях. | from InteractsWithPivotTable |
| int | updateExistingPivot(mixed $id, array $attributes, bool $touch = true) Обновить существующую запись pivot в таблице. | from InteractsWithPivotTable |
| void | attach(mixed $id, array $attributes = [], bool $touch = true) Прикрепить модель к родительской. | from InteractsWithPivotTable |
| array | formatAttachRecords(array $ids, array $attributes) Создать массив записей для вставки в таблицу pivot. | from InteractsWithPivotTable |
| array | formatAttachRecord(int $key, mixed $value, array $attributes, bool $hasTimestamps) Создать полную загрузку записи прикрепления. | from InteractsWithPivotTable |
| array | extractAttachIdAndAttributes(mixed $key, mixed $value, array $attributes) Получить идентификатор записи прикрепления и дополнительные атрибуты. | from InteractsWithPivotTable |
| array | baseAttachRecord(int $id, bool $timed) Создать новую запись прикрепления pivot. | from InteractsWithPivotTable |
| array | addTimestampsToAttachment(array $record, bool $exists = false) Установить метки времени создания и обновления в записи прикрепления. | from InteractsWithPivotTable |
| bool | hasPivotColumn(string $column) Определить, является ли заданный столбец столбцом pivot. | from InteractsWithPivotTable |
| int | detach(mixed $ids = null, bool $touch = true) Отсоединить модели от отношения. | from InteractsWithPivotTable |
| Pivot | newPivot(array $attributes = [], bool $exists = false) Создать новый экземпляр модели pivot. | from InteractsWithPivotTable |
| Pivot | newExistingPivot(array $attributes = []) Создать новый существующий экземпляр модели pivot. | from InteractsWithPivotTable |
| Builder | newPivotStatement() Получить новый простой билдер запроса для таблицы pivot. | from InteractsWithPivotTable |
| Builder | newPivotStatementForId(mixed $id) Получить новый запрос pivot для заданного идентификатора "другой" записи. | from InteractsWithPivotTable |
| Builder | newPivotQuery() Создать новый билдер запроса для таблицы pivot. | from InteractsWithPivotTable |
| $this | withPivot(array|mixed $columns) Установить столбцы в таблице pivot для извлечения. | from InteractsWithPivotTable |
| array | parseIds(mixed $value) Получить все идентификаторы из заданного значения смешанного типа. | from InteractsWithPivotTable |
| mixed | parseId(mixed $value) Получить идентификатор из заданного значения смешанного типа. | from InteractsWithPivotTable |
| array | castKeys(array $keys) Преобразовать заданные ключи в целые числа, если они являются числовыми, и в строки в противном случае. | from InteractsWithPivotTable |
| mixed | castKey(mixed $key) Преобразовать заданный ключ в целое число, если он является числовым. | from InteractsWithPivotTable |
| array | castAttributes(array $attributes) Преобразовать заданные атрибуты pivot. | from InteractsWithPivotTable |
| $this | performJoin(Builder|null $query = null) Установить условие соединения для запроса отношения. |
| $this | addWhereConstraints() Установить условие where для запроса отношения. | |
| array | buildDictionary(Collection $results) Создать словарь моделей, индексированный по внешнему ключу отношения. | |
| string | getPivotClass() Получить класс, используемый для моделей pivot. | |
| BelongsToMany | using(string $class) Указать пользовательскую модель pivot для использования в отношении. | |
| BelongsToMany | as(string $accessor) Указать пользовательский аксессор pivot для использования в отношении. | |
| BelongsToMany | wherePivot(string $column, string $operator = null, mixed $value = null, string $boolean = 'and') Установить условие where для столбца таблицы pivot. | |
| BelongsToMany | wherePivotIn(string $column, mixed $values, string $boolean = 'and', bool $not = false) Установить условие "where in" для столбца таблицы pivot. | |
| BelongsToMany | orWherePivot(string $column, string $operator = null, mixed $value = null) Установить условие "or where" для столбца таблицы pivot. | |
| BelongsToMany | withPivotValue(string $column, mixed $value = null) Установить условие where для столбца таблицы pivot. | |
| BelongsToMany | orWherePivotIn(string $column, mixed $values) Установить условие "or where in" для столбца таблицы pivot. | |
| Collection|Model | findOrNew(mixed $id, array $columns = ['*']) Найти связанную модель по её первичному ключу или вернуть новую модель. | |
| Model | firstOrNew(array $attributes) Получить первую связанную запись модели, соответствующую атрибутам, или создать её. | |
| Model | firstOrCreate(array $attributes, array $joining = [], bool $touch = true) Получить первую связанную запись, соответствующую атрибутам, или создать её. | |
| Model | updateOrCreate(array $attributes, array $values = [], array $joining = [], bool $touch = true) Создать или обновить связанную запись, соответствующую атрибутам, и заполнить её значениями. | |
| Model|Collection|null | find(mixed $id, array $columns = ['*']) Найти связанную модель по её первичному ключу. | |
| Collection | findMany(mixed $ids, array $columns = ['*']) Найти несколько связанных моделей по их первичным ключам. | |
| Model|Collection | findOrFail(mixed $id, array $columns = ['*']) Найти связанную модель по её первичному ключу, или выбросить исключение. | |
| mixed | first(array $columns = ['*']) Выполнить запрос и получить первый результат. | |
| Model|BelongsToMany | firstOrFail(array $columns = ['*']) Выполнить запрос и получить первый результат, или выбросить исключение. | |
| BelongsToMany | shouldSelect(array $columns = ['*']) Получить столбцы select для запроса отношения. | |
| array | aliasedPivotColumns() Получить столбцы pivot для отношения. | |
| LengthAwarePaginator | paginate(int $perPage = null, array $columns = ['*'], string $pageName = 'page', int|null $page = null) Получить пагинатор для оператора "select". | |
| Paginator | simplePaginate(int $perPage = null, array $columns = ['*'], string $pageName = 'page', int|null $page = null) Разбить данные данного запроса на страницы с помощью простого пагинатора. | |
| bool | chunk(int $count, callable $callback) Разбить результаты запроса на куски. | |
| void | hydratePivotRelation(array $models) Заполнить отношение pivot таблицы для моделей. | |
| array | migratePivotAttributes(Model $model) Получить атрибуты pivot из модели. | |
| void | touchIfTouching() Если требуется обновление родительской модели, обновить. | |
| bool | touchingParent() Определить, нужно ли обновлять родительскую модель при синхронизации. | |
| string | guessInverseRelation() Попытка угадать имя обратного отношения. | |
| Collection | allRelatedIds() Получить все ID для связанных моделей. | |
| Model | save(Model $model, array $pivotAttributes = [], bool $touch = true) Сохранить новую модель и привязать её к родительской модели. | |
| array | saveMany(Collection|array $models, array $pivotAttributes = []) Сохранить массив новых моделей и привязать их к родительской модели. | |
| Model | create(array $attributes = [], array $joining = [], bool $touch = true) Создать новый экземпляр связанной модели. | |
| array | createMany(array $records, array $joinings = []) Создать массив новых экземпляров связанных моделей. |
| Builder | getRelationExistenceQueryForSelfJoin(Builder $query, Builder $parentQuery, array|mixed $columns = ['*']) Добавить ограничения для запроса отношения на том же столе. | |
| строка | getExistenceCompareKey() Получить ключ для сравнения с родительским ключом в запросе "has". | |
| строка | getRelationCountHash() Получить хеш таблицы соединения отношения. | |
| BelongsToMany | withTimestamps(mixed $createdAt = null, mixed $updatedAt = null) Указать, что таблица свода имеет метки времени создания и обновления. | |
| строка | getForeignPivotKeyName() Получить внешний ключ для отношения. | |
| строка | getQualifiedForeignPivotKeyName() Получить полностью квалифицированный внешний ключ для отношения. | |
| строка | getRelatedPivotKeyName() Получить "связанный ключ" для отношения. | |
| строка | getQualifiedRelatedPivotKeyName() Получить полностью квалифицированный "связанный ключ" для отношения. | |
| строка | getTable() Получить промежуточную таблицу для отношения. | |
| строка | getRelationName() Получить имя отношения для отношения. | |
| строка | getPivotAccessor() Получить имя обработчика свода для этого отношения. |
Подробности
static void macro(string $name, object|callable $macro)
Зарегистрировать пользовательский макрос.
static void mixin(object $mixin)
Смешать другой объект в класс.
static bool hasMacro(string $name)
Проверяет, зарегистрирован ли макрос.
static mixed __callStatic(string $method, array $parameters)
Динамически обрабатывает вызовы класса.
mixed __call(string $method, array $parameters)
Динамически обрабатывает вызовы класса.
void __construct(Builder $query, Model $parent, string $table, string $foreignPivotKey, string $relatedPivotKey, string $parentKey, string $relatedKey, string $relationName = null)
Создать новый экземпляр отношения "многие ко многим".
static mixed noConstraints(Closure $callback)
Выполнить обратный вызов с отключенными ограничениями для отношения.
void addConstraints()
Установить основные ограничения для запроса отношения.
void addEagerConstraints(array $models)
Установить ограничения для жадного загрузки отношения.
array initRelation(array $models, string $relation)
Инициализировать отношение для набора моделей.
array match(array $models, Collection $results, string $relation)
Сопоставить результаты, загруженные с жадной загрузкой, с их родителями.
mixed getResults()
Получить результаты отношения.
Collection getEager()
Получить отношение для жадной загрузки.
Коллекция get(array $columns = ['*'])
Выполнить запрос как операцию «выбор».
void touch()
Обновить все связанные модели для отношения.
Например: Обновить все роли, связанные с этим пользователем.
int rawUpdate(array $attributes = [])
Выполнить прямое обновление для базового запроса.
Билдер getRelationExistenceCountQuery(Билдер $query, Билдер $parentQuery)
Добавить ограничения для запроса подсчета отношения.
Билдер getRelationExistenceQuery(Билдер $query, Билдер $parentQuery, array|mixed $columns = ['*'])
Добавить ограничения для запроса отношения.
protected массив getKeys(array $models, string $key = null)
Получить все первичные ключи для массива моделей.
Билдер getQuery()
Получить базовый запрос для отношения.
Билдер getBaseQuery()
Получить базовый билдер запросов, управляющий билдером Eloquent.
Модель getParent()
Получить родительскую модель отношения.
строка getQualifiedParentKeyName()
Получить полное квалифицированное имя родительского ключа для отношения.
Модель getRelated()
Получить связанную модель отношения.
строка createdAt()
Получить имя столбца «создано в».
строка updatedAt()
Получить имя столбца «обновлено в».
строка relatedUpdatedAt()
Получить имя столбца «обновлено в» для связанной модели.
static массив morphMap(array $map = null, bool $merge = true)
Установить или получить карту морфинга для полиморфных отношений.
static protected массив|null buildMorphMapFromModels(array $models = null)
Создает таблично-ключевой массив из имён классов моделей.
static строка|null getMorphedModel(string $alias)
Получить модель, связанную с пользовательским полиморфным типом.
void __clone()
Принудительное клонирование базового билдера запросов при клонировании.
массив toggle(mixed $ids, bool $touch = true)
Переключает модель (или модели) от родителя.
Каждая существующая модель отсоединяется, а несуществующие — присоединяются.
массив syncWithoutDetaching(Коллекция|Коллекция|массив $ids)
Синхронизировать промежуточные таблицы со списком идентификаторов без отсоединения.
array sync(Collection|Collection|array $ids, bool $detaching = true)
Синхронизировать промежуточные таблицы со списком идентификаторов или коллекцией моделей.
protected array formatRecordsList(array $records)
Форматировать список записей sync/toggle так, чтобы он индексировался по ID.
protected array attachNew(array $records, array $current, bool $touch = true)
Прикрепить все записи, которых нет в предоставленных текущих записях.
int updateExistingPivot(mixed $id, array $attributes, bool $touch = true)
Обновить существующую запись pivot в таблице.
void attach(mixed $id, array $attributes = [], bool $touch = true)
Присоединить модель к родительской.
protected array formatAttachRecords(array $ids, array $attributes)
Создать массив записей для вставки в таблицу pivot.
protected array formatAttachRecord(int $key, mixed $value, array $attributes, bool $hasTimestamps)
Создать полную загрузку данных для присоединения.
protected array extractAttachIdAndAttributes(mixed $key, mixed $value, array $attributes)
Получить идентификатор записи присоединения и дополнительные атрибуты.
protected array baseAttachRecord(int $id, bool $timed)
Создать новую запись присоединения pivot.
protected array addTimestampsToAttachment(array $record, bool $exists = false)
Установить метки времени создания и обновления в записи присоединения.
protected bool hasPivotColumn(string $column)
Определить, определен ли данный столбец как столбец pivot.
int detach(mixed $ids = null, bool $touch = true)
Отсоединить модели от отношения.
Pivot newPivot(array $attributes = [], bool $exists = false)
Создать новый экземпляр модели pivot.
Pivot newExistingPivot(array $attributes = [])
Создать новый существующий экземпляр модели pivot.
Builder newPivotStatement()
Получить новый простой билдер запросов для таблицы pivot.
Builder newPivotStatementForId(mixed $id)
Получить новый запрос pivot для заданного идентификатора «другого».
protected Builder newPivotQuery()
Создать новый билдер запросов для таблицы pivot.
$this withPivot(array|mixed $columns)
Установить столбцы в таблице pivot для извлечения.
protected array parseIds(mixed $value)
Получить все идентификаторы из данного смешанного значения.
protected mixed parseId(mixed $value)
Получить ID из данного смешанного значения.
protected array castKeys(array $keys)
Преобразовать заданные ключи в целые числа, если они числовые, и в строки в противном случае.
protected mixed castKey(mixed $key)
Преобразовать данный ключ в целое число, если он числовой.
protected array castAttributes(array $attributes)
Преобразовать заданные атрибуты связывающей таблицы.
protected $this performJoin(Builder|null $query = null)
Установить условие объединения для запроса отношения.
protected $this addWhereConstraints()
Установить условие where для запроса отношения.
protected array buildDictionary(Collection $results)
Создать словарь моделей, индексированный по внешнему ключу отношения.
string getPivotClass()
Получить класс, используемый для моделей связывающей таблицы.
BelongsToMany using(string $class)
Указать пользовательскую модель связывающей таблицы для использования в отношении.
BelongsToMany as(string $accessor)
Указать пользовательский аксессор связывающей таблицы для использования в отношении.
BelongsToMany wherePivot(string $column, string $operator = null, mixed $value = null, string $boolean = 'and')
Установить условие where для столбца связывающей таблицы.
BelongsToMany wherePivotIn(string $column, mixed $values, string $boolean = 'and', bool $not = false)
Установить условие "where in" для столбца связывающей таблицы.
BelongsToMany orWherePivot(string $column, string $operator = null, mixed $value = null)
Установить условие "or where" для столбца связывающей таблицы.
BelongsToMany withPivotValue(string $column, mixed $value = null)
Установить условие where для столбца связывающей таблицы.
Кроме того, новые записи связывающей таблицы получат это значение.
BelongsToMany orWherePivotIn(string $column, mixed $values)
Установить условие "or where in" для столбца связывающей таблицы.
Collection|Model findOrNew(mixed $id, array $columns = ['*'])
Найти связанную модель по её первичному ключу или вернуть новую экземпляр связанной модели.
Model firstOrNew(array $attributes)
Получить первую связанную модель, соответствующую атрибутам, или создать её экземпляр.
Модель firstOrCreate(array $attributes, array $joining = [], bool $touch = true)
Получить первую связанную запись, соответствующую атрибутам, или создать её.
Модель updateOrCreate(array $attributes, array $values = [], array $joining = [], bool $touch = true)
Создать или обновить связанную запись, соответствующую атрибутам, и заполнить её значениями.
Модель|Коллекция|null find(mixed $id, array $columns = ['*'])
Найти связанную модель по её первичному ключу.
Коллекция findMany(mixed $ids, array $columns = ['*'])
Найти несколько связанных моделей по их первичным ключам.
Модель|Коллекция findOrFail(mixed $id, array $columns = ['*'])
Найти связанную модель по её первичному ключу или выбросить исключение.
mixed first(array $columns = ['*'])
Выполнить запрос и получить первый результат.
Модель|BelongsToMany firstOrFail(array $columns = ['*'])
Выполнить запрос и получить первый результат или выбросить исключение.
protected BelongsToMany shouldSelect(array $columns = ['*'])
Получить столбцы выбора для запроса отношения.
protected array aliasedPivotColumns()
Получить столбцы оси отношения.
"pivot_" добавляется как префикс к каждому столбцу для удобства удаления позже.
LengthAwarePaginator paginate(int $perPage = null, array $columns = ['*'], string $pageName = 'page', int|null $page = null)
Получить пагинатор для оператора "select".
Paginator simplePaginate(int $perPage = null, array $columns = ['*'], string $pageName = 'page', int|null $page = null)
Разбить данный запрос на страницы с помощью простого пагинатора.
bool chunk(int $count, callable $callback)
Разбить результаты запроса на блоки.
protected void hydratePivotRelation(array $models)
Заполнить отношение к таблице оси для моделей.
protected array migratePivotAttributes(Модель $model)
Получить атрибуты оси из модели.
void touchIfTouching()
Если необходимо обновить родительскую модель, обновить её.
protected bool touchingParent()
Определить, нужно ли обновлять родительскую модель при синхронизации.
protected string guessInverseRelation()
Попытка определить имя обратного отношения.
Collection allRelatedIds()
Получить все идентификаторы связанных моделей.
Model save(Model $model, array $pivotAttributes = [], bool $touch = true)
Сохранить новую модель и прикрепить её к родительской модели.
array saveMany(Collection|array $models, array $pivotAttributes = [])
Сохранить массив новых моделей и прикрепить их к родительской модели.
Model create(array $attributes = [], array $joining = [], bool $touch = true)
Создать новый экземпляр связанной модели.
array createMany(array $records, array $joinings = [])
Создать массив новых экземпляров связанных моделей.
Builder getRelationExistenceQueryForSelfJoin(Builder $query, Builder $parentQuery, array|mixed $columns = ['*'])
Добавить ограничения для запроса отношения на одном и том же таблице.
string getExistenceCompareKey()
Получить ключ для сравнения с родительским ключом в запросе "has".
string getRelationCountHash()
Получить хэш таблицы соединения для отношения.
BelongsToMany withTimestamps(mixed $createdAt = null, mixed $updatedAt = null)
Указать, что таблица связей имеет метки времени создания и обновления.
string getForeignPivotKeyName()
Получить внешний ключ для отношения.
string getQualifiedForeignPivotKeyName()
Получить полностью квалифицированный внешний ключ для отношения.
string getRelatedPivotKeyName()
Получить "связанный ключ" для отношения.
string getQualifiedRelatedPivotKeyName()
Получить полностью квалифицированный "связанный ключ" для отношения.
string getTable()
Получить промежуточную таблицу для отношения.
string getRelationName()
Получить имя отношения для данного отношения.
string getPivotAccessor()
Получить имя аксессора для поля pivot для данного отношения.
© Taylor Otwell
Licensed under the MIT License.
Laravel is a trademark of Taylor Otwell.
https://laravel.com/api/5.6/Illuminate/Database/Eloquent/Relations/BelongsToMany.html