2016-12-18 14 views
0

私はポストテーブルから投稿を取得するこのコントローラを持っています。 投稿内のすべての投稿テーブルは、他のテーブルとの関係が "hasMany"であるが好きで、です。Laravelでの合計列の関係で注文

コントローラー:しかし、右の構文を書く方法を知ってはいけない

$post->likes->sum(like) 

public function getDashboard(){ 
     $posts = Post::orderBy('created_at', 'desc')->get(); 

     return view('dashboard', ['posts' => $posts]); 
} 

私のような何かを 'で作成された' を置換したいと思います。

EDIT:

ここではテーブルです。等

Posts 
--id 
--body 
Likes 
--id 
--post_id 
--like 

カラムが値1または-1を有することができます。 各投稿の列の合計を注文したいと思います。 したがって、1つの嫌い(-1)と1つのような(1)の投稿は合計値0を持つため、(1)のような投稿の後に配置されます。あなたは、このためにwithCount()を使用することができます

答えて

1

Post::withCount('likes')->orderBy('likes_count')->get() 

withCount()はあなたの結果 モデル

上の{関連} _count列を配置します更新

Post::withCount(['likes' => function($q) { 
    $q->where('like', 1) 
}]) 
->orderBy('likes_count') 
->get() 

アップデート2

あなたのようにあなたのコレクションを並べ替えるためにsortByDesc()を使用することができます助けたこと

$posts = Post::get(); 

$posts = $posts->sortByDesc(function ($post) { 
      return $post->likes->sum('like'); 
     }); 
+0

。唯一のことは、私が嫌いな機能を実装することです。これで、_likes_テーブル内のほとんどの行を持つポストが注文されます。 _likes_テーブル内のlikeという名前の列は、値1または-1を取ることができます。 そのため、ある種の列合計が最も適していると思っていました。 –

+0

更新された回答を確認してください。 –

+0

申し訳ありませんが、私は何が欲しいかについてはあまりにも不明でした。 元の投稿を更新しました –