首页 > 解决方案 > 使用 Laravel 的 eloquent 查询和相同的关联 SQL 查询(使用 toSql() 方法获得)不同的结果

问题描述

我在 Laravel Eloquent 中有这个查询:

$measures = Measure::groupBy('time')
        ->selectRaw('time, sum("delta") as sum_delta, sum("redistributed") as sum_redistr') 
        ->where('operation_id', 'ACC0000001') 
        ->where('time', '>', '2020-05-09 00:00') 
        ->where('time', '<', '2020-05-10 00:00') 
        ->where('source', 'source1') 
        ->where('conso_prod', 'Conso')
        ->get()

当我使用函数进行调试toSql(),然后将其粘贴到 pgAdmin 中时,我得到了正确的结果。

select time, sum("delta") as sum_delta, sum("redistributed") as sum_redistr from "measures" 
where "operation_id" = 'ACC0000001'
and "time" > '2020-05-09' and "time" < '2020-05-10' and "source" = 'source1' and "conso_prod" = 'Conso' group by "time"

我每 30m 有一个结果,这是正确的。

但是当我使用 eloquent 时,我的行数相同,但所有time字段都相同:

"2020-05-09 00:00"

而不是递增。

我不明白为什么?我使用带有 TimescaleDB 扩展的 PostgreSQL。

标签: laravelpostgresqleloquenttimescaledb

解决方案


在我的模型中,我将时间投入到date而不是datetime

protected $casts = [
    'time' => 'date'
];

我将其更改为:

protected $casts = [
    'time' => 'datetime'
];

它奏效了。

如果有人像我一样失败,我会放在那里!还是要谢谢你的帮助


推荐阅读