Laravel Routes- Get id from url


Laravel Routes- Get id from url

这是我的"parent"路由:

Route::resource("services", "ServicesController");

它工作得很好,我现在需要这个"子"路由工作。内容如下:

Route::resource("services/{id}/reviews", "ReviewsController");

这个想法是,对于每个service_id,我可以写一个评论,将选择该服务的id并将其与表单数据一起保存到我的数据库中,但这不起作用。我得到以下错误:

NotFoundHttpException in RouteCollection.php line 161:

但是,当我像下面这样创建"子"路由时:

Route::resource("reviews", "ReviewsController");

我得到以下错误,意味着service_id缺失:

SQLSTATE[HY000]: General error: 1364 Field 'service_reviewed' doesn't have a default value 

我怎么能得到下面这个路由(如上所示)的工作,因为我认为它会从url中选择service_id并将其持久化到我的数据库(因为它是我的评论表中的外键)与表单数据一起:

Route::resource("services/{id}/reviews", "ReviewsController");

你需要:

Route::get("services/{id}/reviews", "ReviewsController@method");

,你需要在资源路由之前定义它

谢谢大家的回复。我发现路由嵌套就是答案:

Route::resource("services", "ServicesController");
Route::resource("services.reviews", "ReviewsController");

然后在ReviewsController中:

public function create($id){

    $user_service = User_service::findOrFail($id);
    return view ("reviews.create")->withUser_service($user_service);

}

但是它必须在我的创建视图中附带一个特定的url:

{{ Form::open(['route' => ['services.reviews.store', $user_service->id]]) }}

现在困扰我的是store方法。我需要传入id参数,因为user_service_id (id)是我的评论表中的外键:

public function store(ReviewsRequest $request, $id){

    $service_review = new Service_review($request->all());
    'Auth::user()->service_reviews()->save($service_review);         
    return redirect("reviews");

我知道我应该使用口才来实现这一点,但语法对我来说还不清楚。