使用Laravel中的where()执行简单的搜索

时间:2017-03-13 20:41:43

标签: php laravel

我正在尝试执行搜索,使用复选框在我的模型中查找结果,然后在页面上显示它们。

我的路线:

Route::get('parts/cpu', 'PartsController@cpuList');
Route::get('parts/cpu/search', 'PartsController@searchCpu');

我的控制器:

public function cpuList (){
    $processors = Processor::all();

    return view('parts.cpuList', compact('processors'));
}
public function searchCpu(Request $request){
    $processors = Processor::query();
    $processors->where('tech', '=', $request->input('tech'))->get();

    return view('parts.cpuList', compact('processors'));
}

我的观点:

<form method="GET" action="/parts/cpu/search">
                <div class="checkbox">
                    <label><input type="checkbox" name="tech" value="Intel">Intel</label>
                </div>
                <div class="checkbox">
                    <label><input type="checkbox" name="tech" value="AMD">AMD</label>
                </div>
                <input value="Submit" type="submit" class="pull-right btn btn-primary">
            </form>
       <ul class="list-group">
            @foreach ($processors as $processor)
                <li class="list-group-item clearfix"><a href="/parts/cpu/{{$processor->id}}">{{$processor->name}}</a></li>
            @endforeach
        </ul>

我收到以下错误:没有模型[App \ Processor]的查询结果。

这是搜索时显示的网址:/ parts / cpu / search?tech = Intel

3 个答案:

答案 0 :(得分:1)

您的数据库中无需运行2个查询。

改变这个:

$processors = Processor::query();
$processors->where('tech', '=', $request->input('tech'))->get();

对此:

$processors = Processor::where('tech', '=', $request->input('tech'))->get();

答案 1 :(得分:0)

试试这个

$query = Processor::query();
$processors = $query->where('tech', '=', $request->input('tech'))->get();

答案 2 :(得分:0)

这似乎是路由问题......

如果我将路径和表单操作分别更改为parts / search和/ parts / search,那么它可以正常工作,看起来Laravel有一些优先级导致冲突。

或者它可能会干扰我为内部处理器详细信息页面设置的通配符路径:

Route::get('parts/cpu/{processor}', 'PartsController@cpuShow');

如果有人能够对此有所了解,我们将不胜感激。