Laravel仅搜索完全匹配

时间:2020-06-28 19:03:11

标签: php mysql sql database laravel

此处是PHP / Laravel的新手。

预期的行为

我想使用表单操作通过插入ID(例如快递员跟踪ID)从数据库中获取数据。到目前为止,它一直有效,但是我只想在数据库中存在该ID时显示结果

代码

控制器

    public function search(Request $request)
    {
      $request->validate([
            'query' => 'required|min:10|max:10',
        ]);

        $query = $request->input('id');

        $orders = Order::where('id','LIKE',"%$query%")->get();
        $name = $request->input('id', '$id');

      return view('order-details', compact('orders'));

order.blade

<form action="{{ route('order-details') }}" method="GET" class="order-form">
    <div class="row">
        <div class="col-lg-12">
            <input type="text" placeholder="Track Order ID" name="query" id="query" value="{{ request()->input('query') }}">
        </div>
        <div class="col-lg-12">
            <button type="submit">Submit Now</button>
        </div>
    </div>
</form>
@if(count($errors) > 0)
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{$error}}</li>
            @endforeach
        </ul>
@endif

路线

Route::get('order', 'OrderController@index')->name('order');
Route::get('order-detail', 'OrderController@search')->name('order-details');

2 个答案:

答案 0 :(得分:1)

我认为您的问题是您使用的是类似条件,例如数字上的胡闹不是很好。

$query = $request->input('id') ?? -1;

Order::where('id', $query)->get();

仅在id上的地方,将仅返回存在id的行。

答案 1 :(得分:0)

您使用了错误的查询。

$orders = Order::where('id','LIKE',"%$query%")->get();

like运算符不仅会获得类似该查询的信息。

您只需要删除like运算符即可仅获取与确切ID匹配的订单。

$orders = Order::where('id',$query)->get();

您还可以添加exists规则:

正在验证的字段必须存在于给定的数据库表上。

$request->validate([
            'query' => 'exists:orders,id',
        ]);