laravel - Laravel SQLSTATE [42S22]:找不到列:1054 Unknown column '0' in
问题描述
我正在开发一个 Laravel 博客,而此刻,我想使用事件根据特定条件更改 Post 状态的状态。在我的迁移中,我有一个 post_status 枚举表,其中包含我想要使用的状态,我已经连接了事件和侦听器,还使用检索设置了 dispatchesEvents,所以我并没有真正发布任何内容。
我想将当前状态为“完成”且超过 90 天的帖子更改为“已归档”状态。为此,我使用下面的代码。状态实际上是根据第一个条件更新的,但我不确定是否考虑了第二个条件(或者是否正确定义),我的直觉是问题出在最后一行。这是监听器中的代码:
public function handle(PostStatusUpdaterEvent $event)
{
$old_date = Carbon::now()->subDays(90);
Post::where(['post_status' => 3]) // 3 = Complete status
->where(['end_date', '<', $old_date])
->update(['post_status' => 4]); // 4 = Archived status
}
和错误:
lluminate\Database\QueryException
SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'where clause' (SQL: update
`posts` set `post_status` = 4, `posts`.`updated_at` = 2020-02-24 13:13:15 where
(`post_status` = 3) and (`0` = end_date and `1` = < and `2` = 2019-11-26 13:13:15))
我在受保护的可填充数组中有 post_status 字段,并且表本身也受到保护。还尝试在受保护的追加数组中设置 post_status 字段,还尝试将表 id 设置为隐藏,但均无效。最后,我在侦听器中导入了模型和 Carbon 命名空间(如使用中...)
解决方案
仅当您想在同一个 where 中运行多个检查时,您才会在 where 中使用数组
WHERE (`post_status` = 3 AND `end_date` = '2019-11-26 13:13:15')
正确的代码是
Post::where([
['post_status', 3], // 3 = Complete status
['end_date', '<', $old_date],
])
->update(['post_status' => 4]); // 4 = Archived status
生产WHERE `post_status` = 3 AND `end_date` < '2019-11-26 13:13:15'
你会去(没有数组概念)
Post::where('post_status', 3) // 3 = Complete status
->where('end_date', '<', $old_date)
->update(['post_status' => 4]); // 4 = Archived status
有关更多信息,请参见Where 子句。
推荐阅读
- vba - Excel VBA - If 语句上的运行时错误“1004”
- javascript - 在 React Native 中加载组件时出现错误
- javascript - window.location.href 的安全使用
- r - 如何在 R 中找到符合条件的 MIN
- intellij-idea - IntelliJ 根本不显示...
- c++ - 没有大小参数的 CString::GetBuffer() 有什么作用?
- kotlin - 如何使用区分大小写按多个字段排序
- excel - VBA - 不能正确使用表格对象
- activerecord - 投影按标签过滤的表的单个列作为 taggale
- python-3.x - 深度学习 Keras 模型 CTC_Loss 给出 loss = infinity