【发布时间】:2021-07-09 22:15:41
【问题描述】:
问题
我正在尝试使用此 SQL 查询 在我的 模型 中创建一个 范围:
SELECT *
FROM ro_container_events
WHERE (container_id, location_timestamp, id)
IN (
SELECT distinct container_id, MAX(location_timestamp) AS lts, MAX(id) AS rce_id
FROM ro_container_events
GROUP BY container_id
)
模型名称是 ContainerEvent,我的数据库中的表名称是 ro_container_events。
另外,我知道 SQL 查询是有效的,因为我在我的 MySQL 管理工具 (HeidiSQL) 中运行了它,它返回了正确的行。
我尝试过的
我的范围(在我的 ContainerEvent 模型中)当前如下所示:
public function scopeLatestEventForContainers($query)
{
return $query->select(DB::raw('
SELECT *
FROM ro_container_events
WHERE (container_id, location_timestamp, id)
IN (
SELECT distinct container_id, MAX(location_timestamp) AS lts, MAX(id) AS rce_id
FROM ro_container_events
GROUP BY container_id
)'
)
);
}
但它不返回任何行?
我的研究
我一直在搜索这个主题,但似乎找不到我的范围有什么问题......
Laravel 文档说我们可以使用:
DB::raw('...')
为了进行特定的 SQL 查询。
而且我在其他一些线程上看到我应该能够使用以下内容创建范围:
return $query->select(DB::raw('...');
【问题讨论】:
-
你试过 print_r() 你把 print_r 里面的函数返回什么?
标签: php mysql sql laravel laravel-backpack