我想要一个像这样的
http://localhost:8000/category/1/3
第一个ID是Category_id,第二个是Food_id。
我的路线是:
Route::get('category/{Category_id?}/{Food_id?}', 'DetailsController@categ');
在控制器中我有:
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'));
}
但是它给出错误缺少参数2的App \ Http \ Controllers \ Detailscontroller :: categ()。任何人都可以告诉问题在哪里。我是laravel的新手。我想做什么首先显示基于category_id的食物项目,然后根据food_id显示食物的deatails。
为了展示相关类别的食物,我认为
@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
答案 0 :(得分:0)
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);
}
或者根据您设置路线的方式,如果您需要,也可以包括该类别(但如果它只是一个单一的关系,那么它可能是多余的)所以你会有
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
希望这有帮助!