我有一个用户和注释模型以及一个数据透视表user_like,用于存储用户喜欢的注释。注释表还通过hasMany关系与另一个模型(范围)相关联。我试图返回所有注释及其用户,范围和喜欢的总数。
以下代码适用于用户,范围甚至喜欢。但是,我只对返回喜欢的数量而不是实际值(即喜欢注释的用户列表)感兴趣。有没有办法只包括关系中其中一个模型的计数?
雄辩查询:
$annotations = Annotation::with('ranges')
->with('likes')
->with('author')
->where('document_id', $docid)->get()->toArray();
模特:
class Annotation extends Eloquent {
public function ranges()
{
return $this->hasMany('Range');
}
public function author()
{
return $this->belongsTo('User', 'user_id');
}
public function likes()
{
return $this->belongsToMany('User', 'annotation_like');
}
public function countOfLikes()
{
return $this->likes()->count();
}
}
答案 0 :(得分:2)
如果您想使用预先加载来检索多个注释的计数,那么您需要以下帮助'关系设置:
public function countLikesRelation()
{
return $this->belongsTo('User','annonation_like')->selectRaw('annotation_like, count(*) as count')->groupBy('annotation_like');
}
// then you can access it as such:
$annotations= Annotation::with('countLikesRelation')->get();
$annotations->first()->countLikesRelation->count;
// to make it easier, we create an accessor to the count attribute
public function getLikesCountAttribute()
{
return $this->countLikesRelation->count;
}
//And then, simply use
$annotations->first()->sectionsCount;
答案 1 :(得分:-2)
为什么不创建范围?
public function scopeLikesCount()
{
return $this->likes()->count();
}
然后
$annotations = Annotation::with('ranges')
->with('author')
->likesCount()
->where('document_id', $docid)->get()->toArray();