我想要一个这样的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
希望这有帮助!