【发布时间】:2018-06-26 07:44:39
【问题描述】:
我正在使用 5.5 版的 Laravel,我有一对多的关系。 在第一个表(乘客)中,我有乘客登记表
Passengers
id|name
1|Carlos
2|Pedro
在第二张表中,我有这些乘客的进出历史记录
历史
id|passenger_id|type|created_at
1|1|in|2018-01-16 00:00:00
2|2|in|2018-01-16 01:00:00
3|3|in|2018-01-16 02:00:00
4|1|out|2018-01-16 03:00:00
5|1|in|2018-01-16 04:00:00
6|2|out|2018-01-16 05:00:00
7|3|out|2018-01-16 06:00:00
8|4|in|2018-01-16 07:00:00
我想要得到的是基于每个用户的最后一次交互,类型列等于“in”的所有乘客的计数,也就是说,我的预期结果是这样的
id|passenger_id|type|created_at
5|1|in|2018-01-16 04:00:00
8|4|in|2018-01-16 07:00:00
count = 2 rows
研究我能够得到一个适合我的 SQL 查询,但我不知道如何使用 Laravel 应用它
SELECT p.id, p.name, h1.id, h1.created_at, h1.type
FROM passengers p
JOIN histories h1 ON (p.id = h1.passenger_id)
LEFT OUTER JOIN histories h2 ON (p.id = h2.passenger_id AND (h1.created_at < h2.created_at OR h1.created_at = h2.created_at AND h1.id < h2.id))
WHERE h2.id IS NULL AND h1.type='in';
谁能帮我在 Laravel 中安装这个查询,或者如果我有另一个简单的解决方案,我很感激
【问题讨论】:
-
最后一次交互来自“created_at”列。每次检查乘客时,我都会根据最后的记录交替输入/输出类型。如果这是该乘客第一次注册,则假定类型列的值为“in” - 感谢您尝试帮助我。
标签: php sql laravel eloquent relationship