Метод Laravel FirstOrCreate вернул столбец не найден

Метод Laravel FirstOrCreate вернул столбец не найден

15.12.2019 10:44:50 Просмотров 41 Источник

Я пытаюсь проверить, существуют ли данные в таблице перед сохранением. Я могу сохранить в таблицу

 public function read($book_id)
 {

        MyBook::create([
            'book_id' => $id,
            'user_id' => Auth::id()
        ]);
    $readBooks = Book::where('id', $book_id)->get()->first();
    return view('read')->with('data', $readBooks);
}

Но когда я попытался использовать firstOrCreate для проверки перед сохранением он вернул эту ошибку

SQLSTATE[42S22]: столбец не найден: 1054 неизвестный столбец ' 1 ' В 'где предложение ' (SQL: select * from my_bookswhere (1is null and 1is null) предел 1)

Это метод, который я использую

 public function read($book_id)
 {

    $mybook = MyBook::firstOrCreate([
        ['book_id' => $book_id],
        ['user_id' => Auth::id()]
    ]);
    $readBooks = Book::where('id', $book_id)->get()->first();
    return view('read')->with('data', $readBooks);
}

Моя my_bookтаблицы my_book

public function up()
{
    Schema::create('my_books', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->integer('book_id')->unsigned();
        $table->integer('user_id')->unsigned();
        $table->timestamps();
    });
}

Я не знаю, что я делаю неправильно, я надеюсь, что смогу найти помощь здесь.Спасибо.

У вопроса есть решение - Посмотреть?

Ответы - Метод Laravel FirstOrCreate вернул столбец не найден / Laravel FirstOrCreate Method returned Column not found

Является ответом!
Davit

15.12.2019 10:48:50

Вы передаете массив внутри него также 2 массива. Но это неверно. Вы должны быть использовать, как это

$mybook = MyBook::firstOrCreate(
    ['book_id' => $book_id],
    ['user_id' => Auth::id()]
);
https://stackoverflow.com/questions/59347485/laravel-firstorcreate-method-returned-column-not-found/59347508#comment104891031_59347508
Ух ты! Спасибо, это сработало.\
https://stackoverflow.com/questions/59347485/laravel-firstorcreate-method-returned-column-not-found/59347508#comment104891195_59347508
Я поляне помогу тебе
lagbox

15.12.2019 10:49:29

Вы передаете один массив массивов в качестве первого аргумента firstOrCreate. Он принимает ассоциативные массивы для Аргументов.

$mybook = MyBook::firstOrCreate(
    ['book_id' => $book_id],
    ['user_id' => Auth::id()]
);

Аргументы 1 и 2 являются ассоциативными массивами.

Ларавель 6.x Docs-Eloquent-другие методы создания firstOrCreate

Помочь в развитии проекта:
Закрыть X