UpdateOrCreate () дает Столбец не найден: 1054 Неизвестный столбец '0' в 'where clause'

Я пытаюсь назначить роль пользователю, когда он попытается. Но это дает мне эту ошибку. Я использую updateOrCreate(), потому что хочу использовать этот метод позже, чтобы изменить роль пользователя.

SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'where clause' (SQL: select * from roles where (0 = user_id and 1 = = and 2 = 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"]);
}

Как это исправить ?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
1 605
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам нужно передать связанный массив вместо отдельных значений:

$this->updateOrCreate(["user_id" => $id], ["role_name" => "newbie"]);

Ой .. Как я сделал ту ошибку .. -_-

Teoman Tıngır 06.09.2018 16:28

Я предполагаю, что вы застряли на синтаксисе where. :-D

aynber 06.09.2018 16:33

Вероятно, это не то, что хочет ОП. Первый массив должен соответствовать тому, с чем сравнивать, второй массив должен быть значениями обновления. Я предполагаю, что user_id и role_name должны быть отдельными аргументами.

Devon 06.09.2018 16:42

@Devon Вы правы. Я должен был прочитать об этом документы.

aynber 06.09.2018 16:46

@ HasanTıngır убедитесь, что вы разделяете аргументы, иначе эта функция будет только создавать и никогда не обновлять.

Devon 06.09.2018 16:49

Значения должны быть установлены с использованием ассоциативного массива, где имя столбца является ключом, а значение - значением, которое вы хотите найти / вставить.

$this->updateOrCreate(
    ["user_id" => $id],
    ["role_name" => "newbie"]
);

Другие вопросы по теме