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

订单刀片


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


慕雪6442864
浏览 130回答 2
2回答

三国纷争

我认为你的问题是你正在使用类似的条件,就像众所周知的数字不稳定一样。$query&nbsp;=&nbsp;$request->input('id')&nbsp;??&nbsp;-1; Order::where('id',&nbsp;$query)->get();仅在 id 上的位置,将仅返回 id 存在的行。

有只小跳蛙

您使用了错误的查询。$orders = Order::where('id','LIKE',"%$query%")->get();like 运算符不仅会得到与该查询类似的任何内容。您只需删除 like 运算符即可仅获取与确切 id 匹配的订单。$orders = Order::where('id',$query)->get();您还可以添加存在规则:验证的字段必须存在于给定的数据库表中。$request->validate([             'query' => 'exists:orders,id',         ]);
打开App,查看更多内容
随时随地看视频慕课网APP