Для работы с связью "многие ко многим" в Laravel 9 используется понятие "Pivot". Пивотная модель представляет собой промежуточную таблицу, которая связывает две основные модели.
Laravel предоставляет несколько способов работы с пивотной моделью.
1. Объявление связи между моделями:
Для объявления связи между моделями, которая использует пивотную таблицу, вы можете использовать метод belongsToMany()
в активной модели. Этот метод принимает три аргумента: класс связанной модели, имя промежуточной таблицы и имена столбцов ключа. Например:
class User extends Model { public function roles() { return $this->belongsToMany(Role::class, 'role_user', 'user_id', 'role_id'); } }
2. Доступ к данным в pivot:
После объявления связи, вы можете получить доступ к данным в пивотной таблице, используя метод withPivot()
. Этот метод принимает аргументом массив имен столбцов, которые вы хотите получить. Например:
$user = User::find(1); foreach ($user->roles as $role) { echo $role->pivot->created_at; }
3. Создание новых записей в pivot:
Для создания новых записей в пивотной таблице используйте метод attach()
. Он принимает идентификатор связанной модели или массив идентификаторов. Например:
$user = User::find(1); $user->roles()->attach($role->id);
4. Удаление записей из pivot:
Для удаления записей из пивотной таблицы используйте метод detach()
. Он также принимает идентификатор связанной модели или массив идентификаторов. Например:
$user = User::find(1); $user->roles()->detach($role->id);
5. Обновление данных в pivot:
Если вам нужно обновить данные в пивотной таблице, вы можете использовать метод sync()
. Он синхронизирует записи в пивотной таблице с заданными значениями. Метод также может принимать второй аргумент - массив дополнительных атрибутов, которые вы хотите установить для каждого отношения. Например:
$user = User::find(1); $user->roles()->sync([ $role1->id => ['active' => true], $role2->id => ['active' => false] ]);
Таким образом, в Laravel 9 работа с pivot осуществляется путем объявления связи между моделями, доступа к данным в pivot, создания новых записей в pivot, удаления записей из pivot и обновления данных в pivot с использованием методов, предоставляемых Laravel.