Я пытаюсь назначить роль пользователю, когда он попытается. Но это дает мне эту ошибку. Я использую updateOrCreate(), потому что хочу использовать этот метод позже, чтобы изменить роль пользователя.
SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'where clause' (SQL: select * from
roleswhere (0= user_id and1= = and2= 10) limit 1)
Schema::create('roles', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger("user_id")->index();
$table->string("role_name");
$table->foreign("user_id")->references("id")->on("users")->onDelete("cascade");
});
RegisterController
protected function create(array $data)
{
$user = user::create([
'name' => $data['name'],
'email' => $data['email'],
"username" => $data["username"],
'password' => Hash::make($data['password']),
]);
if ($user) {
$model = new Role();
$model->assignNewbieRole($user->id);
}
return $user;
}
Ролевая модель
public function assignNewbieRole($id)
{
$this->updateOrCreate(["user_id"," = ",$id],["role_name"," = ","newbie"]);
}
Как это исправить ?






Вам нужно передать связанный массив вместо отдельных значений:
$this->updateOrCreate(["user_id" => $id], ["role_name" => "newbie"]);
Я предполагаю, что вы застряли на синтаксисе where. :-D
Вероятно, это не то, что хочет ОП. Первый массив должен соответствовать тому, с чем сравнивать, второй массив должен быть значениями обновления. Я предполагаю, что user_id и role_name должны быть отдельными аргументами.
@Devon Вы правы. Я должен был прочитать об этом документы.
@ HasanTıngır убедитесь, что вы разделяете аргументы, иначе эта функция будет только создавать и никогда не обновлять.
Значения должны быть установлены с использованием ассоциативного массива, где имя столбца является ключом, а значение - значением, которое вы хотите найти / вставить.
$this->updateOrCreate(
["user_id" => $id],
["role_name" => "newbie"]
);
Ой .. Как я сделал ту ошибку .. -_-