获得laravel投票最多的回复

时间:2017-08-18 09:10:29

标签: php laravel

我有类似&的答复关系与模特不同。用户可以喜欢他们的最佳回复,而不是回复不好。 之类的&不像关系几乎相同,只是存放在不同的表中。 现在我想得到最喜欢和最喜欢的回复。回答最不同的,比较它们只显示投票数最多的回复。我怎样才能实现它?

在我的讨论模型中

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

2 个答案:

答案 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();

这将为您提供最受欢迎的回复模型。

对于大多数不喜欢的回复,然后比较两个?我想在那时你可以根据需要合并整个东西。