此处是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');
答案 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',
]);