Laravel 4模型关系无法正常工作。无法从Model访问相关列

时间:2014-07-01 09:20:43

标签: php laravel blade

假设我有三个模型:章节,书籍,作者。

  

A Book hasMany Chapter&&章属于书。

     

作者hasMany Book&&预订belognsTo作者。

这意味着,ChapterTable有一个book_id,而BookTable有一个author_id。

现在我想从特定的作者那里算上所有章节。我将如何使用Blade?

以下是我的想法:

  $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');

我知道这会有效,但如果我的章节表上没有作者身份证明,是不是有可能获得上述结果?

此致

乔治

2 个答案:

答案 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

那样访问它们