私はこの奇妙なエラーを受け取っています:
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)
)からwhere句を渡していて、スコープにそれを続けているだけだと思います。
どんな助けでも大歓迎です。
エラーは->update(['locked', 1]);
によるもので、->update(['locked' => 1]);
である必要があります
update関数は配列を "column" => "value"として使用します。構文エラーによりLaravelが考える[ 0 => 'locked', 1 => 1]
なので、このSQLに変換されますSET 0 = 'locked', 1 = 1
...
コメントセクションで述べたように、関数を次のように変更します。
public function scopeLock($query)
{
return $query->where('locked', 0)->update(['locked' => 1]);
}
Updateメソッドの変更に注意してください。