找不到列:1054“字段列表”中的未知列“0”-Laravel-我的代码中的任何地方都没有0列
Posted
技术标签:
【中文标题】找不到列:1054“字段列表”中的未知列“0”-Laravel-我的代码中的任何地方都没有0列【英文标题】:Column not found: 1054 Unknown column '0' in 'field list' - Laravel - I don't have a 0 column anywhere in my code 【发布时间】:2016-07-04 02:52:38 【问题描述】:我收到了这个奇怪的错误:
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
为空)
问题是,我没有 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()
之类的操作。
我在 Thread 模型中的查询范围:
public function scopeLock($query)
return $query->where('locked', 0)->update(['locked', 1]);
就是这样。我认为这可能是因为我的控制器 (Thread::where('topic_id', $topic)
) 传递了一个 where 子句,而我只是将其继续到我的范围内。
非常感谢任何帮助。
【问题讨论】:
$thread = Thread::where('topic_id', $topic)->first();
完成此查询并尝试?
另外,->update(['locked' => 1]);
仍然遇到同样的错误。而且我有很多线程,而不仅仅是我要编辑的一个,这样就不会工作了。
【参考方案1】:
错误是由于->update(['locked', 1]);
而应该是->update(['locked' => 1]);
更新函数使用数组作为"column" => "value",你的语法错误导致Laravel认为[ 0 => 'locked', 1 => 1]
,所以它转换成这条SQLSET 0 = 'locked', 1 = 1
...
【讨论】:
哈哈,我在回来发布答案之前就想通了。你是第一个回答的,所以我会接受你的回答。谢谢! @TaylorSwift 我在评论部分回答了这个问题。 ://【参考方案2】:正如我在评论部分提到的,把你的函数改成这样:
public function scopeLock($query)
return $query->where('locked', 0)->update(['locked' => 1]);
注意更新方法的变化。
【讨论】:
【参考方案3】:我在 WHERE 有双重条件
ContestPool::where(['contest_id', '=', $contest_id], ['user_id', '=', $user_id])->delete();
我修复了为这两种情况添加括号
ContestPool::where([['contest_id', '=', $contest_id], ['user_id', '=', $user_id]])->delete();
【讨论】:
【参考方案4】:在我的情况下,问题出在模型属性中。我使用受保护的 $fillable、保护 $foreignKey、受保护的 $timestamp。为了解决de问题,我把所有的属性都放在了protect $fillable变量中。
【讨论】:
以上是关于找不到列:1054“字段列表”中的未知列“0”-Laravel-我的代码中的任何地方都没有0列的主要内容,如果未能解决你的问题,请参考以下文章
错误代码:1054。“字段列表”中的未知列“部门”0.000 秒
SQLSTATE [42S22]:找不到列:1054 未知列 '0' where 子句
SQLSTATE [42S22]:找不到列:1054 'where 子句为啥'中的未知列'4'我找不到错误
SQLSTATE [42S22]:找不到列:1054未知列material_tags.material_uuid