Метод attach
Метод attach применяется к объекту отношения типа belongsToMany
и позволяет привязать одну или несколько связанных моделей
к текущей модели. Первым параметром передаётся идентификатор
или массив идентификаторов связываемых моделей, вторым -
массив дополнительных данных для промежуточной таблицы.
Метод возвращает массив с информацией о прикреплённых записях.
Синтаксис
<?php
$model->relation()->attach($id, $pivotData);
?>
Пример с одним идентификатором
Давайте привяжем роль с идентификатором 1 к пользователю:
<?php
namespace App\Http\Controllers;
use App\Models\User;
class UserController extends Controller
{
public function attachRole()
{
$user = User::find(1);
$user->roles()->attach(1);
echo "Role attached successfully";
}
}
?>
Результат выполнения кода:
"Role attached successfully"
Пример с массивом идентификаторов
Давайте привяжем несколько ролей к пользователю:
<?php
namespace App\Http\Controllers;
use App\Models\User;
class UserController extends Controller
{
public function attachRoles()
{
$user = User::find(1);
$user->roles()->attach([1, 2, 3]);
echo "Roles attached successfully";
}
}
?>
Результат выполнения кода:
"Roles attached successfully"
Пример с дополнительными данными pivot
Давайте привяжем роль к пользователю с дополнительными данными в промежуточной таблице:
<?php
namespace App\Http\Controllers;
use App\Models\User;
class UserController extends Controller
{
public function attachRoleWithPivot()
{
$user = User::find(1);
$user->roles()->attach(1, [
'assigned_by' => 'admin',
'priority' => 1
]);
echo "Role attached with pivot data";
}
}
?>
Результат выполнения кода:
"Role attached with pivot data"
Пример с получением результата attach
Метод attach возвращает массив с информацией
о прикреплённых записях:
<?php
namespace App\Http\Controllers;
use App\Models\User;
class UserController extends Controller
{
public function attachWithResult()
{
$user = User::find(1);
$res = $user->roles()->attach(1);
print_r($res);
}
}
?>
Результат выполнения кода:
["attached" => [1], "updated" => [], "detached" => []]
Смотрите также
-
метод
detach,
который отвязывает связанные модели -
метод
sync,
который синхронизирует связи с заданными моделями -
метод
toggle,
который переключает состояние связей -
метод
updateExistingPivot,
который обновляет данные в промежуточной таблице