web-dev-qa-db-ja.com

列が見つかりません:1054 'フィールドリスト'の不明な列 '0'-Laravel-コードのどこにも0列がありません

私はこの奇妙なエラーを受け取っています:

SQLSTATE [42S22]:列が見つかりません:1054不明な列 '0'が 'フィールドリスト'にあります(SQL:forum_threadsセット0 =ロック、1 = 1、updated_at = 2016-03-17 16:01:59更新topic_id = 3およびforum_threads.deleted_atはnull)

実は、0列はありません。コードのどこかに0を含むwhere句がありません。スコープクエリを使用しています。

私のコントローラーは:

    $action = $request->input('action');
    $topic = $request->input('topic');
    $thread = Thread::where('topic_id', $topic);

    switch ($action) {
        case ('locked'):
            $thread->lock();
            break;
    }

ご覧のとおり、私はあまり行いません。スレッドをロックしようとしています。私のThreadモデルでロックスコープを呼び出しています。多くのスイッチケースがありますが、その1つがlockです。クエリの半分を上部で実行したので、自分で繰り返す必要はありません。 $thread->delete()$thread->restore()などのアクションを実行できるように、それを$thread変数に単に格納しました。

スレッドモデルのクエリスコープ:

public function scopeLock($query)
{
    return $query->where('locked', 0)->update(['locked', 1]);
}

それでおしまい。私はコントローラー(Thread::where('topic_id', $topic))からwh​​ere句を渡していて、スコープにそれを続けているだけだと思います。

どんな助けでも大歓迎です。

11
Taylor

エラーは->update(['locked', 1]);によるもので、->update(['locked' => 1]);である必要があります

update関数は配列を "column" => "value"として使用します。構文エラーによりLaravelが考える[ 0 => 'locked', 1 => 1]なので、このSQLに変換されますSET 0 = 'locked', 1 = 1...

42
Moak

コメントセクションで述べたように、関数を次のように変更します。

public function scopeLock($query)
{
    return $query->where('locked', 0)->update(['locked' => 1]);
}

Updateメソッドの変更に注意してください。

3
Jilson Thomas