РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
181 of 1392 menu

Метод belongsToMany

Метод belongsToMany используется для определения связи многие-ко-многим между двумя моделями Eloquent. Первый параметр принимает имя связанной модели, второй - имя промежуточной таблицы, третий - внешний ключ текущей модели, четвёртый - внешний ключ связанной модели. Если имена таблиц и ключей соответствуют соглашениям Laravel, можно передать только первый параметр.

Синтаксис

<?php Model::belongsToMany(RelatedModel::class, $table, $foreignPivotKey, $relatedPivotKey); ?>

Пример

Давайте определим связь между моделями User и Role через таблицу role_user:

<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Model { public function roles(): BelongsToMany { return $this->belongsToMany(Role::class); } } ?>

Аналогично определяем связь в модели Role:

<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class Role extends Model { public function users(): BelongsToMany { return $this->belongsToMany(User::class); } } ?>

Пример

Теперь получим все роли пользователя с id равным 1:

<?php use App\Models\User; $user = User::find(1); $roles = $user->roles; foreach ($roles as $role) { echo $role->name; } ?>

Результат выполнения кода:

["admin", "editor", "viewer"]

Пример

Получим пользователей, у которых роль admin:

<?php use App\Models\Role; $role = Role::where('name', 'admin')->first(); $users = $role->users; foreach ($users as $user) { echo $user->name; } ?>

Результат выполнения кода:

["John Doe", "Jane Smith", "Bob Johnson"]

Пример

Добавим новую роль пользователю с помощью метода attach:

<?php use App\Models\User; use App\Models\Role; $user = User::find(1); $role = Role::where('name', 'moderator')->first(); $user->roles()->attach($role->id); ?>

Удалим роль у пользователя с помощью метода detach:

<?php use App\Models\User; $user = User::find(1); $user->roles()->detach(3); ?>

Пример

Синхронизируем роли пользователя с помощью метода sync:

<?php use App\Models\User; $user = User::find(1); $user->roles()->sync([1, 2, 3]); ?>

Смотрите также

  • метод attach,
    который добавляет связь многие-ко-многим
  • метод detach,
    который удаляет связь многие-ко-многим
  • метод sync,
    который синхронизирует связи многие-ко-многим
  • метод toggle,
    который переключает связи многие-ко-многим
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить