2017-08-01 19 views
0

で表示します。私の場合、のユーザーテーブルと評価テーブルのような2つのテーブルがあります。ユーザーの詳細をlaravel

テーブル、私は名前、電子メールなど、

評価表のような利用者の個人情報を格納しています、私はUSER_IDと評価を格納していユーザーでは(格付けのような数字になります1,2,3,4及び5)

を私はここに関係二つのテーブル を作成しているが関係

//User Model 
public function ratings() 
{ 
    return $this->hasMany(Rating::class); 
} 

//Rating model 
public function user() 
{ 
    return $this->belongsTo(Consultant::class); 
} 
です

私は

$data = User::with('ratings')->get(); 

私は熱心な負荷から取得します応答は、私は熱心ですべてのユーザーの平均評価を得ることができますどのように

[ 
{ 
"id": 1, 
"cunsultant_name": "Quincy Jerde", 
"contact_number": "882-904-3379", 
    "ratings": [ 
    { 

     "user_id": 1, 
     "rating_for_user": 3 

    }, 
    { 

     "user_id": 1, 
     "rating_for_user": 5 
    }, 
    { 

     "user_id": 2, 
     "rating_for_user": 3 
    } 
    ] 
    }, 
    { 
    "user_name": "Alene Dicki", 
    "contact_number": "247.604.8170", 
     "ratings": [ 
      { 
       "id": 4, 
       "user_id": 3, 
       "rating_for_user": 3 
      } 
    ] 
} 
] 

積極的なロードを使用してデータを取得し表示することができることができます読み込み中ですか?

+0

あなたは 'join'と' avg' funtionで試しましたか? –

+1

はい、私は@SagarGautamを試しましたが、私がjoinとavgを使用するときにユーザーが評価をしていない場合、ユーザーの詳細は表示されません。 –

答えて

3

あなたは

$data = User::with('ratings') 
->join('Rating table','user.id','=','Rating table.user_id') 
->select('user.*',DB::raw('avg(rating_for_user)')) 
->get(); 

があなたの必要性ごとにコードを修正し、このようにそれを行うことができますあなたは

$user->ratings()->avg('rating_for_user'); 
+2

私は答えを投稿しましたが、それを削除しました。これはLaravelでやる方法です。 –

+0

こんにちは、$ user変数を取得しているところの@giollianosulit。 –

+0

@justin私はあなたが私を意味すると思う。変数$ userは単なる例です。データに複数のユーザーが含まれている場合、foreachを使用してデータを反復処理する必要があります。 – DestinatioN

0

を行うことができます積極的なロードでの平均格付けを取得します。

私は助けてくれることを願っています。

+0

おかげで兄弟... @ sagar – Rits

+1

このクエリは、ユーザーが少なくとも1つの評価を持っている場合にのみ機能します。ユーザーに格付けがない場合、ユーザーの詳細は表示されません。 –

+0

あるかもしれないし、そうでないかもしれない。格付けがない間にユーザーデータのみを取り出すことができる。申し訳ありませんがわからない。 – Rits

関連する問題