【发布时间】:2020-09-16 22:22:35
【问题描述】:
我有一个 whereHas 查询,它从数据透视表中获取数据。但是在数据透视表上,我还有一个名为“订单”的额外列,我使用此列来确保项目以正确的顺序排序,因为它代表了一条公交路线。例如:巴士/渡轮停靠在 1 2 3 4 5 6。
我们有一个出发点和目的地点,表示为“port_id”。
例如,下面的查询为我提供了正确的数据,但我需要确保“订单”列始终根据出发港口 ID 和到达港口 ID 以正确的顺序排列。因此,如果您搜索 port_id 14 到 port_id 15 它不应该返回任何结果,因为“订单”列没有以这种方式连接这些结果。
这是我尝试过的:
$routes = Route::whereHas('ports', function($query) use ($request) {
$query->where('port_id', $request->route['from']['id']);
})
->whereHas('ports', function($query) use ($request) {
$query->where('port_id', $request->route['to']['id']);
})->get();
谢谢。
【问题讨论】:
-
能否分别提供表结构+样本数据+预期结果
-
@Tpojka 不,它没有,谢谢。
-
帮助我更好地理解它。请求可能是:
route_id == 3、departurePort == 14、destinationPort == 16您希望得到[14, 17, 16]的结果;这是正确的预期吗? -
@Tpojka 查询需要检查 'order' 列是否在路由的 SEQUENCE 中。例如,一辆公共汽车从 A 点出发到 E 点,并在其间停靠 B、C 和 D。这些停靠点是按顺序排列的,与 1 2 3 4 相同。“顺序”列用于管理顺序特定旅程的停靠点。所以有人想要从 B 点到 C 点,查询还需要检查“订单”列是否是公共汽车/渡轮路线的正确顺序。