奇怪..但这段代码只能工作一次。如果我尝试重新选择 - 我得到一张空桌子。似乎重新选择不能正常工作。
控制器:
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>
我觉得在重新提交选择之前我需要以某种方式从请求中删除旧值。或者其他的东西:)谢谢你的帮助。
答案 0 :(得分:0)
因为您的查询返回null。 您不能使用id
获得$request->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;。功能还可以。谢谢你的努力。