我正在学习laravel,我想尝试通过通配符显示一本书,但它显示了一个错误


I am learning laravel and i want to try show a single book through a wildcard but it shows an error

这是我的路线

Route::get('showbooks', 'AdminController@show');
Route::get('showbooks/{book_id}', 'AdminController@singleBook');

以下是适用于所有和单本的方法

public function show()
    {
        $allBooks = Book::all();
        return view ('admin.showbooks', compact('allBooks'));
    }
    public function singleBook($book_id)
    {
        $book = Book::find($book_id);
        return view ('admin.singlebook', compact('book'));
    }

这是单本的链接

@foreach($allBooks as $book)
                            <h2><a href="{{ url('showbooks', $book->book_id) }}"> Book Id is: {{ $book->book_id }}</a></h2>
                            <h4>Book Title is: {{ $book->title }}</h4>
                        @endforeach

这是我的单本

<div class="col-lg-9">
                    <h1>{{ $book->book_id }}</h1>
                    <h3>{{ $book->tile }}</h3>
                </div>

您应该在模型中设置主键。因为默认情况下,主键取为"id"。

这就是为什么当你写

$book = Book::find($book_id);

laravel将sql作为

where books.id=blabla

更改您的型号如下:

class Book extends Eloquent {
    protected $primaryKey = 'book_id';
}