laravel只搜索完全匹配

ctrmrzij  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(247)

新手到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'));

订单.刀片

<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');
u5i3ibmn

u5i3ibmn1#

您使用了错误的查询。

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

like操作符将得到类似于该查询的任何内容,而不仅仅是。
您只需删除like操作符,就可以只获得与确切id匹配的订单。

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

您还可以添加exists规则:
验证中的字段必须存在于给定的数据库表中。

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

6g8kf2rb2#

我认为你的问题是你在使用一个like条件,like在数字上是出了名的flakey。

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

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

where on only id,将只返回id存在的行。

相关问题