【发布时间】:2018-02-04 09:34:09
【问题描述】:
我有 3 条路线: 1) /catalog/authors 和控制器方法,它简单地显示数据库中所有作者的列表 2)/catalog/authors/{author} 控制器的一个方法,如果我将作者的姓名分别传递给 id,它会打印出作者的姓名。 有了这 2 个我应付,但有 3 个: 3)/catalog/authors/{author}/{book} 不起作用,问题是我想打印给定作者的第一本书(给定作者的一本书) 模型之间的关系是:
作者书 1:M
方法books()和author()分别。
路由:/catalog/authors/1/1 Works,但在/catalog/authors/1/2 上产生完全相同的结果(例如书名,至于/catalog/authors/1/1 )。虽然作者的第2本书没有在数据库中指定,但尽量解释清楚。
总的来说,我不明白数据库中是否有任何查询用于此检查。
路线:
Route::get('/catalog/authors', 'AuthorsController@index');
Route::get('/catalog/authors/{author}', 'AuthorsController@show');
Route::get('/catalog/authors/{author}/{book}', 'AuthorsController@display');
控制器:
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}?
【问题讨论】:
-
如果出现第二条路线
/1/2,您的视图中的{{$book->title}}会打印什么? -
你在看这里的教程吗?也许可以参考它的背景信息。我不清楚你怎么不知道是否有数据库查询?这段代码不是你自己写的?
-
@jaysingkar 和 1/1 一样