リンク共有サイトで作業しており、リンクを投票順に並べる必要があります。Laravel 5 orderBy関係数とページ番号
私は 'リンク'テーブルとlink_votesテーブルを持っています。
link_votesテーブルには、リンクテーブルの「id」フィールドへの「link_id」参照フィールドがあります。
は、私は私のリンクモデルにhasManyの関係を持っている:
public function votes()
{
return $this->hasMany('\App\LinkVote');
}
は、これは彼がテーブルをlink_votes int型(各行は、単一の投票をある)すべての行を返します。作成日によってすべての私のリンクと順番にそれらを取得する
私の標準クエリは次のとおりです。私が今したい何
$links = Link::withCount('votes')->orderBy('votes_count', 'desc')->paginate(10);
彼らが持っている票の量によって私のリンクを注文です。
私が現在持っていることは次のとおりです。
$links = Link::orderBy('created_at', 'desc')->with('votes')->paginate(20);
これは動作しますが、ほとんどあまりにもよく。私は、link_typeフィールドを持つことで、link_votesテーブルに2種類の投票を持っています。投票がアップヴォートの場合、そのタイプは1であるが、そのタイプが2の場合。
問題は投票数で注文することにより、すべての投票をカウントし、投票権のないリンク。
upvotes(vote_type = 1)からdownvotes(vote_type = 2)を差し引いた合計で注文する方法を見つける必要があります。
私の見解では、その数学を行うことで投票数を示しています。