2017-04-04 14 views
0

の件名IDフィールドによるクエリの照会リソーステーブルと、ユーザーが[vote_id 1]が好きで、[vote_id 2]リソースが嫌いなたびにresources_votesテーブルがあります。私は->with('votes')を使用するとリソースに多くのresources_votesがあるので、リソースIDに関連するresources_votesの各1つを持つオブジェクトの配列を返します。Laravel:リレーション

リソースにはどれくらいの肯定的な票があるのか​​をカウントする方法はありますか?[vote_id =2]、この数のフィールドを追加し、ほとんどの投票からless投票にクエリを発注しますか?

PD:

あなたが使用することができます
{ 
      "id": 2, 
      "name": "aspernatur", 
      "image": "http://lorempixel.com/480/480/?31738", 
      "author": "Max Thiel", 
      "created_by": 6, 
      "reviewed_by": "Mr. Emiliano Frami", 
      "lang_id": 2, 
      "resource_type_id": 1, 
      "status": "Borrado", 
      "resource_type": "Imagen", 
      "platforms": [], 
      "classifications": [], 
      "votes": [ 
       { 
       "id": 2, 
       "user_id": 2, 
       "resource_id": 2, 
       "vote_id": 1 
       }, 
       { 
       "id": 29, 
       "user_id": 1, 
       "resource_id": 2, 
       "vote_id": 2 
       }, 
       { 
       "id": 24, 
       "user_id": 12, 
       "resource_id": 2, 
       "vote_id": 1 
       }, 
      ] 
      }, 

答えて

1

あなたがvotes_countという名前の列を返します。この

$resources = Resource::withCount(['votes' => function ($query) { 
    $query->where('vote_id', '=', '2'); //count positive votes only 
}])->get(); 

このように積極的なロードでそれを得ることができます。カウントを表示するには、その列を呼び出す必要があります。

+0

あなたが言うように働いて、tks! – Miguelopezv

+0

私は両方の正と負のカウントを取得する方法はありますか?私は2つの 'withCount'を作成しようとしましたが、一方はもう一方を上書きします。 'votes_count'行と' negative_votes_count'行を作成する方法はありますか? – Miguelopezv

0

:これはresources_votes関係を持つリソースオブジェクトの例であり、そこに投票アレイと、私はに応じてカウントして注文する必要が投票IDを見ることができます異端のアクセサリー。

は、カスタムデータを取得するには、次の関数を作成し、

protected $appends = ['positiveVotesCounter']; 

次に、あなたのモデル内の次のカスタムフィールドや関数を作成します。

function getPositiveVotesCounterAttribute() { 
    $totalPositiveVotes = 0; 
    foreach($this->votes as $vote) { 
     if($vote['id'] == 2) { 
      $totalPositiveVotes++; 
     } 
    } 

    return $totalPositiveVotes; 
} 

詳細情報はここで見つけることができます: https://laravel.com/docs/5.4/eloquent-mutators

幸運を!

関連する問題