【发布时间】:2021-12-03 17:36:07
【问题描述】:
我正在开发一个在特定位置停靠的公交路线系统。 路线停靠点按“顺序”列按升序排列,如 1、2、3、4、5.. 等。
这些是我的桌子:
巴士
id | operator_id | name
1 | 1 | The Big Red Bus
地点(一些虚拟数据只是举例)
id | name | slug | parent_id
1 | Amsterdam | amsterdam |
2 | London | london |
3 | Stockholm | stockholm |
4 | Helsinki | helsinki |
5 | Dam Square | dam-square | 1
路线
id | name
1 | Amsterdam - London
2 | London - Amsterdam
ROUTE_LOCATIONS(位置)
id | route_id | place_id | order | start | end
1 | 1 | 1 | 1 | 1 | 0
2 | 1 | 2 | 2 | 0 | 0
3 | 1 | 3 | 3 | 0 | 0
4 | 1 | 4 | 4 | 0 | 1
用户输入 当我开始搜索以检查我们是否有任何可用的公交路线时,给定的用户输入是 PLACES 表中的一个地方 slug。 例如:
- 来自:伦敦
- 至:水坝广场
以下是我迄今为止尝试过的查询,但我真的不确定如何在实际查询中构建检查/连接以检查“订单”序列是否升序。我就是想不通。
$buses = Bus::whereHas('route.locations.place', function ($query) use ($from, $to) {
$query->where('slug', $from)->where('end', 0);
})->whereHas('route.locations.place', function ($query) use ($from, $to) {
$query->where('slug', $to)->where('start', 0);
})->get();
关系结构如下:
BUS hasOne ROUTE
ROUTE belongsToMany BUS
ROUTE hasMany LOCATIONS (ROUTE_LOCATIONS TABLE)
我已经尝试了以下查询来获取可用路线,但我真的很喜欢直接在 laravel eloquent 中使用我的模型进行操作,因此我可以轻松地使用我视图中的关系。我只是不确定如何去做。
以下查询仅适用于地点 ID 而不是 slug,我真的很喜欢它是 slug 而不是 ID。
$routes = DB::select('SELECT R.id, R.name
FROM route_locations L
INNER JOIN routes R ON R.id = L.route_id
WHERE
L.place_id = "'.$from->id.'" AND
EXISTS (SELECT id FROM route_locations F WHERE L.route_id = F.route_id AND F.order > L.order AND F.place_id = "'.$to->id.'")');
有谁知道这是否可行以及如何实现?
谢谢!
【问题讨论】:
标签: mysql laravel eloquent wherehas