我收到这个奇怪的错误:
SQLSTATE [42S22]:未找到列:1054“字段列表”中的未知列“0”(SQL:更新
forum_threads
设置0
=锁定,1
1,updated_at
= 2016-03-17 16:01:59 wheretopic_id
= 3 andforum_threads
.deleted_at
is 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
模型中调用锁定范围。我有很多开关盒,其中之一是 lock
。我已经在顶部运行了一半的查询,所以我不必重复自己。我只是将它存储在 $thread
变量中,这样我就可以执行像 $thread->delete()
和 $thread->restore()
这样的操作。
我在线程模型中的查询范围:
public function scopeLock($query)
{
return $query->where('locked', 0)->update(['locked', 1]);
}
就是这样。我认为这可能是因为我有一个 where 子句从我的控制器 ( Thread::where('topic_id', $topic)
) 传递过来,我只是将它继续到我的范围内。
非常感谢任何帮助。
原文由 Taylor 发布,翻译遵循 CC BY-SA 4.0 许可协议
错误是由于
->update(['locked', 1]);
应该是->update(['locked' => 1]);
更新函数使用数组作为“列”=>“值”,您的语法错误导致 Laravel 认为
[ 0 => 'locked', 1 => 1]
,因此它转换为此 SQLSET 0 = 'locked', 1 = 1
…