【问题标题】:Laravel search only exact matchLaravel 只搜索完全匹配
【发布时间】:2020-06-28 19:03:11
【问题描述】:

这里是 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');

【问题讨论】:

  • 不需要这个$name = $request-&gt;input('id', '$id');删除这个
  • $orders = Order::where('id', $query)-&gt;get(); 试试这个。如果 id 不存在,那么您的查询将一无所获

标签: php mysql sql database laravel


【解决方案1】:

我认为你的问题是你使用了类似的条件,就像在数字上臭名昭著的那样。

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

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

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

【讨论】:

  • 我怀疑问题是否简单或者我们不了解整个问题,否则很高兴发表评论:)
【解决方案2】:

您使用了错误的查询。

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

like 运算符将获得与该查询类似的任何内容,而不仅仅是。

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

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

您也可以添加exists 规则:

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

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

【讨论】:

    猜你喜欢
    • 2019-09-22
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多