我正在构建一个小型搜索引擎来获取世界各地的多个旅程,以下是我的Journeys表的样子:
正如您所看到的,departure_checkpoint和arrival_checkpoint是链接的,它是一个完整的旅程,所有这些目的地都属于同一个announce_id号码2.我现在要做的是创建一个表格,你在哪里插入您的出发和到达点,搜索引擎将返回包含这些目的地的announce_id。从Paris到伦敦或维也纳到多伦多的并排位置很简单,但是如何进行交叉搜索以获取像巴黎 - 维也纳或巴黎 - 多伦多这样的旅程? (穿越目的地)。
我正在使用Eloquent ORM,这是我到目前为止所拥有的:
public function search(Request $request) {
if ($request->isMethod('post')) {
$departure = $request->get('departure');
$arrival = $request->get('arrival');
$announceIds = DB::table('journeys')
->select(DB::raw('announce_id'))
->where('departure_checkpoint', $departure)
->where('arrival_checkpoint', $arrival)
->get();
foreach($announceIds as $value) {
$this->founds = DB::table('announcesForDelivery')
->select(DB::raw('*'))
->where('announce_id', $value->announce_id)
->get();
}
return response()->json($this->founds);
}
return false;
}
这项工作仅适用于并排,但不适用于交叉搜索。我想我将不得不使用announce_id来获取任何旅程,但我不确定如何使用Eloquent ORM,它是否会成为子查询?
答案 0 :(得分:0)
这样的事情怎么样:
select id_a from
(select announce_id id_a from Journeys where departure_checkpoint = 'paris') a
inner join
(select announce_id id_b from Journeys where arrival_checkpoint = 'london') b
on a.id_a = b.id_b;
所以你得到了离开的所有公告ID,内部加入目的地的所有公告ID ...将返回这两个用户所在城市的所有旅程的列表...
这是你想要做的吗?