2017-08-26 8 views
0

私は3経路: 1)/ catalog/authorsとデータベースのすべての著者のリストを表示するコントローラメソッド 2)/ catalog/authors/{author }私がidに渡すと、著者の名前を表示するコントローラのメソッド。 これらの2つのI ですが、3: 3)/ catalog/authors/{author}/{book}は動作しません。問題は、著者の最初の本を印刷したいということです与えられた著者)モデル間 の関係は以下のとおりです。経路の最後のパラメータに渡す方法

著者-ブック1:M

方法冊()とそれぞれの著者()。

ルート:/ catalog/authors/1/1 Works、BUT on/catalog/authors/1/2これは、全く同じ結果(例えば、/ catalog/authors/1/1)。著者の第2冊データベースでは指定されていませんが、できるだけ明確に説明しようとしました。

一般に、このチェックのためにデータベースにクエリがあるかどうかはわかりません。

ルート:

Route::get('/catalog/authors', '[email protected]'); 
Route::get('/catalog/authors/{author}', '[email protected]'); 
Route::get('/catalog/authors/{author}/{book}', '[email protected]'); 

コントローラー:

class AuthorsController extends Controller 
{ 
    public function index() 
    { 
     $authors = Author::all(); 

     return view('author.index', compact('authors')); 

    } 

    public function show(Author $author) 
    { 
     return view('author.show', compact('author')); 
    } 

    public function display(Author $author, Book $book) 
    { 

     if (empty($book)) { 
      return 'Book doesnt exist'; 
     } 
     return view('author.books', compact('book', 'author')); 
    } 

} 

ビュー:

{{$book->title}} 

モデル:

class Author extends Model 
{ 

    public function books() 
    { 
     return $this->hasMany(Book::class); 
    } 

} 
class Book extends Model 
{ 
    public function author() 
    { 
     return $this->belongsTo(Author::class, 'author_id'); 
    } 
} 

私はこのようなことをしなければならないことを知っています: $ bookId = $ author-> books() - > first() - > id;

BUT私はこれをどこに追加しなければならないのかわかりません。途中で? これを{book}にどのように転送できますか?

+0

何が '{{$ book->タイトル}}ことshlould? – jaysingkar

+0

ここにチュートリアルを進めていますか?背景情報のために参照する可能性があります。データベースのクエリがあるかどうかわからないのはどういうわけかわかりません。あなたはこのコードを自分で書きませんでしたか? – Lewis42

+0

@jaysingkar 1/1のようなもの –

答えて

0

display()メソッドの現在のアプローチでは、IDが$book_idの本が存在するかどうかを確認しています。
著者に$book_idという本があるかどうかを確認する必要があります。
だから、あなたのdisplay()方法は、第2の経路 `/ 1/2 'の場合にはウルビュープリントに`、

//Check if author has the book with provided book id 
$bookResult = $author->books()->where('book_id','=',$book->book_id)->first(); //assuming you have primary key as book_id 

if (empty($bookResult)) { 
    return 'Book doesnt exist'; 
} 
return view('author.books', compact('bookResult', 'author')); 
関連する問題