我正在使用Laravel 5.5版,我有一对多的关系。 在第一张表(乘客)中,我有乘客登记册
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中安装此查询,或者如果我有另一个简单的解决方案,我很感激
答案 0 :(得分:0)
在@edersoares的帮助下,我找到了解决方案,如果有人遇到同样的问题,它会被注册
$subquery = History::query()->selectRaw('MAX(id)')->groupBy('passenger_id');
$query = History::query()->whereIn('id', $subquery)->where('type', 'in');
$passengersIn = $query->get();