在laravel中显示平均评级的用户详细信息

问题描述 投票:1回答:4

在我的情况下,我有两个表像用户表和评级表。

在用户表中,我存储用户的个人详细信息,如姓名,电子邮件等,

在评级表中,我存储了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
            }
    ]
 }
]

那么如何为每个急切加载的用户获得平均评分?

php laravel laravel-5 laravel-5.3 laravel-5.4
4个回答
5
投票

要获得平均评分,你可以做到

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

0
投票

你可以这样做,

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

根据需要修改代码。

我希望它有所帮助。


0
投票

你可以获得这样的平均评分,

$product=Products::where('id',$productid);
$data=$product->with('ratings')->get();
foreach($data as $d) {
   return $d->ratings->avg('rating'); 
}

我添加了产品平均评级的代码,其中两个模型如下:

产品型号:

<?php

namespace App\Model;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\URL;

class Products extends Model {

protected $table = "products";
public $timestamps = false;

public function ratings()
{
 return $this->hasMany("App\Model\Reviews","p_id");
}
}

评论模型:

<?php

namespace App\Model;

use Illuminate\Database\Eloquent\Model;

class Reviews extends Model
{
protected $table = "product_reviews";
public $timestamps = false;

//Rating model
public function products()
{
    return $this->belongsTo("App\Model\Products");
}
}

0
投票

如果您想获得多个用户的评级,您可以这样做。

  $users = User::where('type', 'instructor')->get();
  foreach ($users as $user) {
      $user['ratings'] = $user->ratings()->avg('rate');
  }
  return $users;
© www.soinside.com 2019 - 2024. All rights reserved.