假设我有三个模型:章节,书籍,作者。
A Book hasMany Chapter&&章属于书。
作者hasMany Book&&预订belognsTo作者。
这意味着,ChapterTable有一个book_id,而BookTable有一个author_id。
现在我想从特定的作者那里算上所有章节。我将如何使用Blade? p>
以下是我的想法:
$chapters = Book::where('author_id', $author)->with('chapters')->get();
$chapters = lists('chapter_title');
但这些行无法正常工作,因为章节在book_array中保存为数组,我无法按照“lists('chapter_title')中的建议直接访问章节;”
当然一个解决方案是,给每个章节表一个author_id,然后我就可以做到:
$chapters = Chapter::where('author_id', $author)->get();
$chapters = lists('chapter_title');
我知道这会有效,但如果我的章节表上没有作者身份证明,是不是有可能获得上述结果?
此致
乔治
答案 0 :(得分:2)
Eloquent
方式使用hasManyThrough
:
// Author model
public function chapters()
{
return $this->hasManyThrough('Chapter', 'Book');
}
// then
$author->chapters()->count(); // single query for a single author
为了急切加载多个作者的计数,例如:
// Author model
public function chaptersCount()
{
return $this->chapters()->selectRaw('count(*) as aggregate')->groupBy('author_id');
}
public function getChaptersCountAttribute()
{
if ( ! array_key_exists('chaptersCount', $this->relations)) $this->load('chaptersCount');
return $this->getRelation('chaptersCount')->first()->aggregate;
}
然后:
$authors = Author::with('chaptersCount')->get();
$authors->first()->chaptersCount;
// or for a single author
$author->chaptersCount; // load the relation if needed
答案 1 :(得分:1)
您可能希望查看此http://laravel.com/docs/eloquent#querying-relations
$chapters = Book::has('author', $author)->with('chapters')->get();
$chapters = lists('chapter_title');
对于您的章节,您可以像Book->chapters