具有多个id的路由(Laravel 5.2)


Route with multiple Id's (Laravel 5.2)

我想要一个这样的URI

http://localhost: 8000/类别/1/3

第一个id是Category_id,第二个是Food_id。

我的路线是:

Route::get('category/{Category_id?}/{Food_id?}', 'DetailsController@categ');

在Controller中输入:

public function categ($Category_id,$Food_id)
{
     $category = Categories::with('food')->findOrFail($Category_id);
     $food = Food::with('restaurant','categories')->findOrFail($Food_id); 
     return view('category', compact('category','food'));
}

但它给出错误 App'Http'Controllers'Detailscontroller::categ()缺少参数2。有人能告诉我问题出在哪里吗?我刚开始旅游。我要做的是首先根据category_id显示食品项目,然后根据food_id显示食品的详细信息。

为了显示相关的食物类别,在我看来我有

@foreach ($Category as $categories) 
 <a  href="category/{{$categories->Category_id}}">{{$categories->CategoryName}} </a>
@endforeach 

显示食物项目。然后我想当我点击任何食物项目,它显示我的详细信息基于food_id。我的NXT视图是这样的:

 @foreach ($category->food as $food)
 <a  href="category/{{$food->Category_id}}/{{$food->Food_id}}">{{  $food->FoodName }}</a>
 @endforeach

Anish留下的评论是正确的,然而,当您试图找到具有null的模型时,您的主要问题将会出现。为了解决这个问题,你可以这样写:

public function categ($Category_id,$Food_id)
{
      $category = is_null($Category_id) ? []: Categories::with('food')->findOrFail($Category_id);
      $food = is_null($Food_id) ?  [] : Food::with('restaurant','categories')->findOrFail($Food_id); 
      return view('category', compact('category','food'));
 }

NB它们可能在你的视图文件中有更多的错误,这取决于你是否试图访问。

但是,我会使用更RESTful的方法:https://laravel.com/docs/5.2/controllers#restful-resource-controllers

本质上,这意味着你有一个控制器类别:

public function index() {
    //Code to get all categories (if you have a lot you may want to paginate them)
}
public function show($Category_Id) {
    $category = Categories::with('food')->findOrFail($Category_id);
    //etc
}

然后是Foods控制器,只有show()方法:

public function show($Food_Id) {
    $food = Food::with('restaurant','categories')->findOrFail($Food_id);
}

或者根据你如何设置你的路由,你也可以包括类别,如果你需要(但如果它只是一个one2Many关系,它可能是多余的),所以你会有

public function show($category_ID, $Food_Id) //etc

你的路由会这样设置:

Route::get('categories', 'CategoriesController@index');
Route::get('categories/{$category_id}', 'CategoriesController@show');
//Assuming you go with the first option - something like:
Route::get('foods/{$food_id}', 'FoodsController@show');
//Assuming you go with the section option for Foods
Route::get('categories/{$category_id}/{$food_id}', 'FoodsController@show');

显然,上面只是一个例子,所以你可以自由地设置你的控制器/路由。

如果你最终选择了RESTful路由(推荐),那么你可能想看看:https://laravel.com/docs/5.2/routing#route-model-binding

希望这有帮助!