Laravel 通过交换出发地和目的地形式进行搜索

问题描述 投票:0回答:1

我有一个使用 Laravel 11 检查运费的项目,我已经有一个表格,其中包含从出发地到目的地已确定的价格。

enter image description here

我使用包含这两个字段的搜索表单,但如何交换搜索,例如从起点 1 到目的地 2 或从起点 1 到目的地 2,结果仍然在同一列中。如果出发地和目的地不同,则结果不应显示或为空。例如,出发地 3 到目的地 2。

我使用get方法,但搜索结果与数据库表中的内容不匹配。 enter image description here 为什么输入与数据表不匹配的搜索仍然显示不同的起点和目的地?结果应该为空,因为它不在列中?

我尝试了以下代码,但它没有按我的预期工作。这是我使用的一些代码

来自搜索

<form action="{{ url('rates') }}" method="GET">
      @csrf
      <div class="form-row align-items-center row">
          <div class="col-md-5">
              <label>Origin</label>
              <select class="form-control single-select-field" name="origin">
                 <option selected>Origin...</option>
                   @foreach ($cities as $city)
                   <option value="{{ $city->id }}">{{ $city->id}}</option>
                   @endforeach
              </select>
            </div>
          <div class="col-md-5">
            <label>Destination</label>
            <select class="form-control single-select-field" name="destination">
               <option selected>Destination...</option>
                  @foreach ($cities as $city)
                    <option value="{{ $city->id }}">{{ $city->id }}</option>
                  @endforeach
            </select>
          </div>
          <div class="col-md-6 my-3">
             <button type="submit" class="btn btn-warning btn-block">Check Rates</button>
          </div>
         </div>
 </form>

费率控制器

$origin = $request['origin'];
$destination = $request['destination'];
$result = RouteModel::where(['origin' => $origin, 'destination' => $destination])->orWhere(['destination' => $origin, 'origin' => $destination])->first();
return $result;

谢谢您的帮助

php laravel laravel-blade laravel-11
1个回答
0
投票

您的查询位置错误。这是一个类似的问题这篇文章

正确的代码应该如下:


$result = RouteModel::where(function (Builder $query) use ($origin, $destination) {
        $query->where('origin', $destination)
            ->where('destination', $origin);
    })
    ->orWhere(function (Builder $query) use ($origin, $destination) {
        $query->where('origin', $origin)
            ->where('destination', $destination);
    })
    ->first();
© www.soinside.com 2019 - 2024. All rights reserved.