未找到列:1054'字段列表'中的未知列'0' - Laravel - 我的代码中的任何位置都没有0列

Tay*_*lor 10 php mysql laravel laravel-5

我收到这个奇怪的错误:

SQLSTATE [42S22]:未找到列:1054'字段列表'中的未知列'0'(SQL:update forum_threadsset 0= locked,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;
    }
Run Code Online (Sandbox Code Playgroud)

如你所见,我做得不多.我只是想锁定一个线程.我在我的Thread模型中调用锁定范围.我有很多开关盒,其中一个是lock.我在顶部运行了一半的查询,所以我不必重复自己.我只是将它存储在$thread变量中,以便我可以执行$thread->delete()和的操作$thread->restore().

我在Thread模型中的查询范围:

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

而已.我想这可能是因为我有一个where子句从我的controller(Thread::where('topic_id', $topic))传递而且我只是继续它到我的范围.

任何帮助都非常感谢.

Moa*_*oak 35

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

更新函数使用数组作为"column"=>"value",您的语法错误导致Laravel思考[ 0 => 'locked', 1 => 1],因此它转换为此SQL SET 0 = 'locked', 1 = 1...