MAX日期的Laravel子查询-与父级的子查询链接中的日期时间格式无效

Posted

技术标签:

【中文标题】MAX日期的Laravel子查询-与父级的子查询链接中的日期时间格式无效【英文标题】:Laravel subquery for MAX date - Invalid datetime format in subquery link with parent 【发布时间】:2021-02-28 03:24:25 【问题描述】:

以下查询返回上述错误:

$readings = MeterReading::where('meters_readings.meter_id', $m->meter_id)
        ->where('meters_readings.read_local_at', '>=', function($query) use ($m) 
            $query->selectRaw('MAX(flow_readings.read_local_at)')
                ->from('flow_readings')
                ->where('flow_readings.meter_id', $m->meter_id)
                ->where('flow_readings.read_local_at', '<=', 'meters_readings.read_local_at');
        )->orderBy('meters_readings.read_local_at', 'DESC')
        ->first();

问题似乎是子查询时间戳比较。它抱怨父表时间戳的输入语法无效。如果我用时间戳字符串替换它,('2018-05-05 12:25:30')它可以工作。

非常感谢任何帮助。

【问题讨论】:

感谢@miken32,我更改了问题,因为子查询父时间戳现在存在问题。 FWIW,这似乎可以通过使用 Eloquent 关系的更简洁的代码来完成。 【参考方案1】:

我从here 得到了上述问题的答案。将Raw 添加到子查询时间戳比较修复它。

$readings = MeterReading::where('meters_readings.meter_id', $m->meter_id)
        ->where('meters_readings.read_local_at', '>=', function($query) use ($m) 
            $query->selectRaw('MAX(flow_readings.read_local_at)')
                ->from('flow_readings')
                ->where('flow_readings.meter_id', $m->meter_id)
                ->whereRaw('flow_readings.read_local_at <= meters_readings.read_local_at');
        )->orderBy('meters_readings.read_local_at', 'DESC')
        ->first();

【讨论】:

以上是关于MAX日期的Laravel子查询-与父级的子查询链接中的日期时间格式无效的主要内容,如果未能解决你的问题,请参考以下文章

来自 LeftJoin 的 MAX() 值的子查询

使用MySQL SELECT查询获取父级的子级

查询未知父firebase的子快照

JavaFX-与父级分开的子边界框

Firebase:在不知道父级的情况下查询内部子级

MySQL递归查询,实现上下级联查,父子级查询