Как в Laravel 9 работать с pivot?

Для работы с связью "многие ко многим" в 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.