2017-08-18 3 views
0

私はモデルとは異なり&のような返信関係があります。ユーザーは自分の最善の返答を好むことができ、悪い返答とは異なります。 &のような関係はほとんど同じで、別のテーブルに保存するだけです。 今、私はほとんどが&のような回答が最も違っていると答えて、それらを比較し、最も多くの投票を持つ回答のみを表示したいと思っています。どうすればそれを達成できますか?以下のようなモデルでは、私の議論モデル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'); 
} 
+0

どの表(モデル)が投票権を保持していますか? –

+0

@ThomasMoors私は返信がLikeテーブルとhasMany関係を持っていると思いますか? – Loko

+0

はい回答に多数の票(好き)があります – masterhunter

答えて

1

私はここでEloquents withCountを使用できると思います。 withCountがあなたの結果のモデルに{relation}_count列を配置することを

$mostLikedReply = Reply::withCount('likes')->orderBy('likes_count', 'desc')->first(); 
$mostUnlikedReply = Reply::withCount('unlikes')->orderBy('unlikes_count', 'desc')->first(); 

注:

だからあなたのようなものを持っていると思います。それでorderBywithCountが適用されるものを注文してから、最初の結果を取得することで、それが最高の好き/嫌いな返信になるはずです。ここから必要なものを比較することができます。

関係を数えることについてもっと読むhere

+0

まさに私が欲しいものです。ご協力いただきありがとうございます。 – masterhunter

0

どの程度

$mostLikedReply = $discussion->replies->sortByDesc(function($reply) { 
    return $reply->likes->count(); 
}->first(); 

これは、最も好きな返信のモデルを提供します。

また、ほとんど同じではない回答が返され、2つを比較しますか?私はあなたが必要な場合は、おそらく全体のものをマージすることができますその時点で推測する。