Laravel按钮搜索PO数据问题:结果不显示及页面跳转需求
Laravel按PO主键实现搜索功能问题修正
核心问题梳理
当前代码存在变量未定义、查询逻辑冗余、视图变量不匹配、缺少搜索表单等问题,导致搜索功能无法正常工作,以下是具体修正方案:
控制器代码修正
修正后的代码解决了变量未获取、重复查询、变量名不一致等问题:
<?php namespace App\Http\Controllers; use App\Models\Supplier; use Illuminate\Http\Request; class SupplierController extends Controller { // 显示搜索页面及搜索结果 public function supplierindex(Request $request) { // 获取搜索框输入的PO值,无输入则为空字符串 $searchPO = $request->input('PO', ''); // 根据PO搜索数据,无关键词则返回空集合 $supp_details = Supplier::where('PO', 'LIKE', "%{$searchPO}%")->get(); return view('frontend.praiBarcode.getweight', compact('supp_details', 'searchPO')); } // 处理搜索请求 public function searchPO(Request $request) { $search = $request->input('PO'); // 仅执行一次数据库查询 $supp_details = Supplier::where('PO', 'LIKE', "%{$search}%")->get(); if ($supp_details->isNotEmpty()) { // 搜索到数据,跳转至结果展示页面 return view('frontend.praiBarcode.getweight', compact('supp_details', 'search')); } else { // 未搜索到数据,返回原页面并携带错误提示,保留用户输入 return back()->withErrors(['PO' => '未找到匹配的PO编号'])->withInput(); } } }
Blade视图修正
补充搜索表单,修正循环变量错误,增加视图容错处理:
<div class="container"> <!-- 搜索表单 --> <form action="{{ route('searchPO') }}" method="GET" class="mb-4"> <div class="form-group row"> <label for="PO" class="col-sm-2 col-form-label">PO编号</label> <div class="col-sm-8"> <input type="text" class="form-control" id="PO" name="PO" value="{{ old('PO', $searchPO ?? '') }}" placeholder="输入PO编号搜索"> @error('PO') <small class="text-danger">{{ $message }}</small> @enderror </div> <div class="col-sm-2"> <button type="submit" class="btn btn-primary">搜索</button> </div> </div> </form> <!-- 搜索结果展示 --> @isset($supp_details) @if($supp_details->isNotEmpty()) <div class="form-group"> @foreach ($supp_details as $s) <div style="font-size: 16px;" class="form-group row"> <label for="supp_name" class="col-sm-2">PO</label> <label for="supp_name" class="col-sm-1">:</label> <div class="col-sm-7"> <label>{{ $s->PO }}</label> </div> </div> @endforeach </div> @else @if(request()->has('PO')) <p class="text-muted">未找到匹配的PO编号</p> @endif @endif @endisset </div>
路由配置补充
在routes/web.php中添加对应路由:
// 显示搜索页面 Route::get('/supplier/index', [SupplierController::class, 'supplierindex'])->name('supplier.index'); // 处理搜索请求 Route::get('/supplier/search', [SupplierController::class, 'searchPO'])->name('searchPO');
关键说明
- 变量统一:控制器中统一使用
supp_details传递数据,避免视图变量不匹配 - 请求处理:通过
Request对象获取搜索参数,消除未定义变量错误 - 性能优化:仅执行一次数据库查询,用
isNotEmpty()判断结果是否存在 - 用户体验:未搜索到数据时返回原页面,保留用户输入并显示错误提示
- 视图容错:用
@isset和@if处理变量不存在或为空的情况,避免页面报错
内容的提问来源于stack exchange,提问作者qyioma
相关产品推荐
相关产品推荐

