Laravel页面与类别路由参数

时间:2016-10-06 12:40:46

标签: php laravel

基于此处的示例https://scotch.io/tutorials/simple-and-easy-laravel-routing#blog-pages-with-categories-route-parameters

我想显示特定类别的条目。 通过调用此路线:

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语句中的代码显示了所有条目,但事实并非如此。

3 个答案:

答案 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);
}