【发布时间】:2017-05-08 14:08:36
【问题描述】:
假设我们有两个模型 Book 和 Author。 Book 模型定义了获取作者的关系:
public function author()
{
return $this->belongsTo(Author::class, 'author_id','id');
}
如果我们想要获取 2000 年出版的所有书籍及其作者,我们可以这样做:
$books = Book::with('author')->where('publication_year', 2000)->get();
现在,如果我们想要返回 2000 年分别出版的唯一作者,该怎么办?假设 Bob 出版了三本书,Sally 出版了两本书。我们将有一个包含 5 本书但没有作者的集合,另一个包含 Bob 和 Sally 各一次的集合。
这是我得到的最接近的(这是一个简化的示例,可能包含拼写错误):
$books = Book::with('author')->where('publication_year', 2000)->get();
$authors = $books->pluck('author')->unique('id');
//this part is bad:
foreach ($books as $book) {
unset($book['author']);
}
有没有更有效的方法来做到这一点,还是我必须设置手动 JOIN?
【问题讨论】: