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子查询-与父级的子查询链接中的日期时间格式无效的主要内容,如果未能解决你的问题,请参考以下文章