gpt4 book ai didi

sql - Eloquent ORM 交叉搜索

转载 作者:行者123 更新时间:2023-12-02 03:04:12 24 4
gpt4 key购买 nike

我正在构建一个小型搜索引擎来获取世界各地的多个旅程,这是我的 Journeys 表的样子:

Journeys Table

如您所见,department_checkpoint 和 arrival_checkpoint 是链接在一起的,这是一个完整的旅程,所有这些目的地都属于同一个 announce_id 编号 2。我现在想做的是创建一个表格,您可以在其中插入出发点和到达点以及搜索引擎将返回包含这些目的地的 announce_id。获取像巴黎到伦敦或维也纳到多伦多这样的并排位置很简单,但是如何进行交叉搜索以获取像巴黎 - 维也纳或巴黎 - 多伦多这样的旅程? (穿越目的地)。

我正在使用 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 来做到这一点,它会是一个子查询吗?

最佳答案

这是您可以使用的(不是最好的)解决方案之一:

程序:

  • 查找具有给定出发检查点的旅程
  • 查找具有给定到达检查点和给定出发地 announce_ids 的旅程查找结果
  • 检查founded department ID是否小于等于foundation arrival ID(否则inverted department with arrival仍然有效)

$departure = '巴黎';

$departure = 'Paris';
$arrival = 'Vienne';

// First pick journeys with given departure
$journeysWithDeparture = DB::table('journeys')
->where('departure_checkpoint', $departure)
->get();

// Then pick only journeys which has given arrival
$journeysWithArrival = DB::table('journeys')
->whereIn('announce_id', $journeysWithDeparture->pluck('announce_id')->toArray())
->where('arrival_checkpoint', $arrival)
->get();


$foundedAnnounceIds = [];
$processedAnnounceIds = [];

// Pick only journeys where departureId <= arrivalId
foreach ($journeysWithArrival as $journey)
{
if(in_array($journey->announce_id, $processedAnnounceIds))
{
continue;
}

$departure = $journeysWithDeparture->whereStrict('announce_id', $journey->announce_id)->first();

if (isset($departure) && $journey->id >= $departure->id)
{
$foundedAnnounceIds[] = $journey->announce_id;
}

$processedAnnounceIds[] = $journey->announce_id;
}

dd($foundedAnnounceIds);

关于sql - Eloquent ORM 交叉搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43830992/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com