You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 00:45:39