我有类似&的答复关系与模特不同。用户可以喜欢他们的最佳回复,而不是回复不好。 之类的&不像关系几乎相同,只是存放在不同的表中。 现在我想得到最喜欢和最喜欢的回复。回答最不同的,比较它们只显示投票数最多的回复。我怎样才能实现它?
在我的讨论模型中
public function replies(){
return $this->hasMany('App\Forum\Reply');
}
在回复模型中
public function discussion(){
return $this->belongsTo('App\Forum\Discussion');
}
public function user(){
return $this->belongsTo('App\User');
}
public function likes(){
return $this->hasMany('App\Forum\Like');
}
在类似模型中
public function user(){
return $this->belongsTo('App\User');
}
public function reply(){
return $this->belongsTo('App\Forum\Reply');
}
答案 0 :(得分:1)
我认为你可以在这里使用Eloquents withCount
。
所以你有类似的东西:
$mostLikedReply = Reply::withCount('likes')->orderBy('likes_count', 'desc')->first();
$mostUnlikedReply = Reply::withCount('unlikes')->orderBy('unlikes_count', 'desc')->first();
请注意,withCount
会在结果模型上放置{relation}_count
列。这就是orderBy
按照withCount
适用的顺序排序的原因,然后通过抓取第一个结果,它应该是最高的喜欢/不喜欢的回复,从这里你可以比较你需要的。
详细了解计算关系here
答案 1 :(得分:0)
怎么样
$mostLikedReply = $discussion->replies->sortByDesc(function($reply) {
return $reply->likes->count();
}->first();
这将为您提供最受欢迎的回复模型。
对于大多数不喜欢的回复,然后比较两个?我想在那时你可以根据需要合并整个东西。