Laravel: Невозможно добавить запись Многие ко многим Отношения - PullRequest
1 голос
/ 25 января 2020

Я хочу добавить запись, используя отношения многие ко многим с Laravel 6 . У меня есть пользователь, который может иметь много ролей, таких как admin, blogger et c

Вот моя функция в модели пользователя

public function roles()
{
    return $this->belongsToMany(
        'App\Role', 'user_roles', 'user_id', 'role_id', 'id'
    );
}

Вот данные запроса после отправки формы

array:5 [▼
    "_token" => "asdnkasdjisajdmasnduajid"
    "email" => "admin@admin.com"
    "roles" => array:2 [▼
        0 => "2"
        1 => "3"
    ]
]

Я пробовал этот метод для сохранения своих записей

$users = [
    'name'     => $request->name,
    'email'    => $request->email,
    'password' => bcrypt($request->password),
    'status'   => 'active',
];
$user = User::create($users);

if ($user) {
    $role = $user->roles()->attach($request->roles);
    if (!$role) {
        Session::flash('error', "Unable to create Role at this moment");

        return redirect()->back();
    }
    Session::flash('status', 'User Created Successfully');

    return redirect()->back();
}

Я получаю

Невозможно создать роль в данный момент

1 Ответ

0 голосов
/ 25 января 2020

Метод attach() отношения многие ко многим ничего не возвращает . Поэтому ваша переменная роли всегда будет пустой, даже если роль успешно присоединена к пользователю.

Попробуйте вместо этого:

$users = [
    'name'     => $request->name,
    'email'    => $request->email,
    'password' => bcrypt($request->password),
    'status'   => 'active',
];

$user = User::create($users);

if (!$user instanceof User) {
    Session::flash('error', "Unable to create User at this moment");
    return redirect()->back();
}

$user->roles()->attach($request->roles);

if (!$user->roles) {
    Session::flash('error', "Unable to create Role at this moment");
    return redirect()->back();
}

Session::flash('status', 'User Created Successfully');
return redirect()->back();
...