查找当前的型号ID(有很多关系)

时间:2018-09-22 11:39:47

标签: php laravel laravel-5

我有一个laravel应用程序,允许用户向书中添加评论。

我的路线是:

Route::get('/books/{book}/addreview', 'ReviewController@create'); 
Route::post('books/{book}/review', 'ReviewController@store');

我的评论控制器看起来像:

public function create(Book $book) {
    return view('/reviews/create');
}

public function store(Book $book){
     $this->validate(request(),[
        'title' => 'required',
        'body' => 'required'
     ]);

     Review::create([
        'title'=>request('title'),
        'body'=>request('body'),
        'user_id'=>auth()->id(),
        'book_id'=>$book->id
     ]);
    // return redirect('/books');

}

但是,我得到了'Undefined variable:book'-所以我没有找到当前的Book ID。如何找到当前的图书ID并将其传递给视图?

5 个答案:

答案 0 :(得分:1)

在审核控制器中:

   Event      e1       e2   e3
user_id         
28          50.0    55.0    0.0
32          0.0     16.0    0.0
33          0.0      0.0    18.0

在视图中:

public function create(Book $book) {
    return view('reviews.create', compact('book'));
}

答案 1 :(得分:0)

您必须发送数据才能查看。

public function create(Book $book) {
    return view('reviews.create', ['book' => $book]);
}

答案 2 :(得分:0)

您没有向视图传递任何东西,您需要显式传递数据给它,以便可以使用它:

return view('reviews.create', ['book' => $book]);

然后,您可以使用$book->id来访问书的ID:

Book ID is {{ $book->id }}.

答案 3 :(得分:0)

// here I add some custom name to this route which will help to generate
// a corresponding URL in the view by passing this name
// route('routename')

Route::get('/books/{book}/addreview', 'ReviewController@create')->name('review.create'); 
Route::post('/books/{book}/review', 'ReviewController@store')->name('review.store');

在呈现review.create视图的控制器中,您必须像这样在路径中传递与当前模型绑定相对应的$book

public function create(Book $book){
    return View::make('reviews.create', ['book' => $book]);
}

,并且在创建表单时在相应的视图中必须指定action属性

<form action={{ route('review.store', $book)}} method="post">
    {{ csrf_field}}

答案 4 :(得分:0)

您应该添加 public function store(Request $book) 代替 公共功能商店(Book $ book)

因为您没有共享图书请求文件。