我想显示特定类别的条目。 通过调用此路线:
Route::get('menues/{city?}', 'PagesController@menue');
我想显示特定城市的所有条目。
这是我的控制器:
public function menue($city = null) {
if ($city) {
$restaurants = User::with(['articles' => function ($q){
$q->nowpublished();
}])->where('city', '=', $city)->get();
} else {
$restaurants = User::with(['articles' => function ($q){
$q->nowpublished();
}])->where('city', '!=', $city)->get();
}
return view('pages.menues')
->withRestaurants($restaurants)
->withCity($city);
}
唯一不起作用的是,通过调用数据库中不存在{city}
的网址,我想显示所有条目。
使用上面的代码,这不会发生。我得到一个空白页。
我该如何解决这个问题?我的猜测是我的else语句中的代码显示了所有条目,但事实并非如此。
答案 0 :(得分:1)
执行以下操作:
public function menue($city = null) {
$restaurants = User::with(['articles' => function ($q){
$q->nowpublished();
}]);
if(if(!is_null($city) && !is_null(City::where('name', $city)->first())) {
$restaurants->where('city', '=', $city);
}
$restaurants = $restaurants->get();
return view('pages.menues')
->withRestaurants($restaurants)
->withCity($city);
}
->where('city', '!=', $city)
是问题所在。如果你想获得所有文章,请删除条件。
将条件更改为:
if(!is_null($city) && !is_null(City::where('name', $city)->first())
答案 1 :(得分:0)
使用请求$ request
public function menue(Request $request) {
if ($request->has('city')) {
答案 2 :(得分:0)
我会做类似的事情:
public function menue($city = null) {
if ($city) {
$restaurants = User::with(['articles' => function ($q){
$q->nowpublished();
}])->where('city', '=', $city)->get();
if (restaurants->count() == 0) {
$restaurants = User::with(['articles' => function ($q){
$q->nowpublished();
}])->get();
}
} else {
$restaurants = User::with(['articles' => function ($q){
$q->nowpublished();
}])->where('city', '!=', $city)->get();
}
return view('pages.menues')
->withRestaurants($restaurants)
->withCity($city);
}