试图用laravel制作过滤器

时间:2017-05-21 23:32:33

标签: php laravel

奇怪..但这段代码只能工作一次。如果我尝试重新选择 - 我得到一张空桌子。似乎重新选择不能正常工作。

控制器:

  function filter(Request $request){
    	if ($request->id == 'all'){
    		$goods = Good::with('Shop')->get();
    		$shops = Shop::all ();
    		return redirect()->back();
    	}else{
	    	$goods = Good::where('shop_id', $request->id)->get();
	    	$shops = Shop::all ();
	    	return view('filter')->with(['goods' => $goods, 'shops' => $shops]);
    	}
    }

刀片文件:

<form action = "{{ route('filter') }}" method="post">
				{{ csrf_field() }}
					<select name="id">
						@foreach ($shops as $shop)
					<option value="{{$shop->id}}" @if (old('shop_id') == $shop->id) selected="selected" @endif>{{$shop->name}} {{$shop->adress}}</option>
						@endforeach;
					<option value="all">All</option>
					</select>
					<br><br>
					<input type="submit" class="btn btn-primary" value="Pasirinkti">
				</form>

我觉得在重新提交选择之前我需要以某种方式从请求中删除旧值。或者其他的东西:)谢谢你的帮助。

3 个答案:

答案 0 :(得分:0)

因为您的查询返回null。 您不能使用id获得$request->id值。你需要使用输入函数并在文档

中解释内部传递id

https://laravel.com/docs/5.4/requests#accessing-the-request

 public function store(Request $request)
    {
        $name = $request->input('name');

        //
    }

所以你需要做的就是改变这行代码:

$goods = Good::where('shop_id', $request->id)->get();

到这一个。从表单中获取正确的id值。

$goods = Good::where('shop_id', $request->input('id'))->get();

答案 1 :(得分:0)

试试这个:

...
if ($request->id == 'all'){
    $goods = Good::with('Shop')->get();
    $shops = Shop::all();
    return view('filter')->with(['goods' => $goods, 'shops' => $shops]);
} ...

答案 2 :(得分:0)

在刀片文件中发现了错误。在/ toBuy路线表格名称是&#39; id&#39;。在过滤器文件/过滤器表单中,名称为&#39; shop_id&#39;。功能还可以。谢谢你的努力。