2017-08-26 63 views
0

我有3条路由: 1)/ catalog/authors和控制器方法,它简单地显示数据库中所有作者的列表 2)/ catalog/authors/{author }控制器的一个方法,如果我将它传递给id,则分别输出作者的姓名。 With these 2 I coped,but with 3: 3)/ catalog/authors/{author}/{book}不起作用,问题是我想打印给定作者的第一本书给定的作者)的模型之间的关系 是:如何传递给路由的最后一个参数

作者图书1:M

方法书()分别作者()。

路径:/ catalog/authors/1/1 Works,BUT on/catalog/authors/1/2它产生完全相同的结果(书名例如,/ catalog/authors/1/1)。虽然作者的第二本书未在数据库中指定,但试图尽可能清楚地解释。

一般来说,我不明白数据库中是否存在任何查询。

路线:

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;

但是我不知道在哪里我必须添加此:在控制器?在路线? 我可以如何将它转移到{book}?

+0

什么呢'{{$书本 - >标题}}'在第二路径'/ 1/2'的情况下,乌尔图打印? – jaysingkar

+0

你在这里接受教程吗?也许可以参考它的背景信息。我不清楚你如何不知道是否有数据库查询?你没有自己写这个代码? – Lewis42

+0

@jaysingkar像1/1一样 –

回答

0

在您当前的方法display()方法中,您正在检查是否存在编号为$book_id的书。
相反,您应该检查作者是否有任何书籍$book_id
所以,你display()方法shlould是,

//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')); 
相关问题