Column not found: 1054 Unknown column '0' in 'field list' - Laravel - 我的代码中的任何地方都没有 0 列

新手上路,请多包涵

我收到这个奇怪的错误:

SQLSTATE [42S22]:未找到列:1054“字段列表”中的未知列“0”(SQL:更新 forum_threads 设置 0 =锁定, 1 1, updated_at = 2016-03-17 16:01:59 where topic_id = 3 and forum_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 许可协议

回复
阅读 76
2 个回答

错误是由于 ->update(['locked', 1]); 应该是 ->update(['locked' => 1]);

更新函数使用数组作为“列”=>“值”,您的语法错误导致 Laravel 认为 [ 0 => 'locked', 1 => 1] ,因此它转换为此 SQL SET 0 = 'locked', 1 = 1

原文由 Moak 发布,翻译遵循 CC BY-SA 3.0 许可协议

正如我在评论部分提到的,将您的功能更改为:

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

请注意更新方法中的更改。

原文由 Jilson Thomas 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏