我的数据库(mysql)中有两个datetime列-completed_at,due_date。我正在使用连接到mysql的lumen框架。问题是我的“ completed_at”列可为空并且包含空值。现在,如果它们的“ completed_at”不为空,那么我需要计算在到期日之前完成了多少记录。
我的代码是-
$completed_tasks_before = Task::where('tasks.assignee_id', $current_user->id)
->where('status','completed')
->where('completed_at', '<>', null)
->where('due_date' ,'>=', 'completed_at')
->count();
我希望这能给我提供记录的截止日期> = completed_at的记录数,但它会给我以下错误-
SQLSTATE[HY000]: General error: 1525 Incorrect DATETIME value: 'completed_at' (SQL: select count(*) as aggregate from `tasks` where `tasks`.`assignee_id` = 2 and `status` = completed and `completed_at` is not null and `due_date` >= completed_at)
答案 0 :(得分:0)
您可以将whereNotNull
用于not null
条件。
您应该使用whereDate
而不是where
进行日期比较。请通过https://laravel.com/docs/5.8/queries#where-clauses进行了解。
答案 1 :(得分:0)
问题是您将const hasId = id => ({ configID } = {}) => configID === id;
if (!configurationArray.some(hasId(configurationId)) {
configurationArray.push(this.configuration);
} else {
//to do
}
列与due_date
STRING而不是此列的值进行比较。因此,更改此行:
completed_at
对此:
->where('due_date' ,'>=', 'completed_at')
请参见documentation(->whereColumn('due_date' ,'>=', 'completed_at')
部分)
答案 2 :(得分:0)
让我解释一下。
... and `due_date` >= completed_at
^
this is not a column, but plain string value
这就是为什么您会收到错误消息。
因此,您可以选择:
->where('column_name', '>', DB::raw('other_column_name'))
或
->whereRaw('column_name > other_column_name')
答案 3 :(得分:0)
哦,原来我是个白痴。 Laravel中的where子句不比较两列,而应该使用whereColumn。早些时候,它正在将列“ due_date”的值与字符串“ completed_at”进行比较。现在我的新代码是-
$completed_tasks_before = Task::where('assignee_id', $current_user->id)
->where('status','completed')
->whereColumn('due_date', '>=', 'completed_at')
->count();