未找到列:1054 “字段列表”中的未知列“0” - Laravel - 我的代码中没有任何地方的 0 列

2022-08-30 23:52:18

我得到这个奇怪的错误:

SQLSTATE[42S22]: 未找到列: 1054 字段列表“ 中的未知列 ”0“ (SQL: update set = lock, = 1, = 2016-03-17 16:01:59 其中 = 3 且 . 为 null)forum_threads01updated_attopic_idforum_threadsdeleted_at

问题是,我没有0列。我的代码中没有带有a的where子句。我正在使用范围查询。0

我的控制器是:

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

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

正如你所看到的,我没有做太多。我只是试图锁定一个线程。我在模型中调用锁定范围。我有很多开关案例,其中之一是.我已经在顶部运行了一半的查询,因此我不必重复自己。我只是将其存储在变量中,以便可以执行和 .Threadlock$thread$thread->delete()$thread->restore()

线程模型中的查询范围:

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

就是这样。我认为这可能是因为我有一个从我的控制器()传递的where子句,我只是继续它到我的范围。Thread::where('topic_id', $topic)

任何帮助都非常感谢。


答案 1

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

更新函数使用数组作为“列”=>“值”,你的语法错误导致Laravel思考,所以它翻译成这个SQL ...[ 0 => 'locked', 1 => 1]SET 0 = 'locked', 1 = 1


答案 2

正如我在注释部分中提到的,请将您的函数更改为:

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

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


推荐