Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel计算相关列的平均值_Laravel_Eloquent_Laravel 5.4_Laravel Eloquent_Laravel Query Builder - Fatal编程技术网

Laravel计算相关列的平均值

Laravel计算相关列的平均值,laravel,eloquent,laravel-5.4,laravel-eloquent,laravel-query-builder,Laravel,Eloquent,Laravel 5.4,Laravel Eloquent,Laravel Query Builder,我试图计算相关栏目的平均评分。商户和客户反馈评论模型之间的关系(1->多个) 商户模式 [Merchant Model] :::::::::::::::::::::::::::: public function clientFeedbacks() { return $this->hasMany('App\ClientFeedbackReviews'); //, 'merchant_id', 'id'); 客户反馈评论 :::::::::::::::::::::::::::::

我试图计算相关栏目的平均评分。商户和客户反馈评论模型之间的关系(1->多个)

商户模式

[Merchant Model]
::::::::::::::::::::::::::::

public function clientFeedbacks() {
    return $this->hasMany('App\ClientFeedbackReviews'); //, 'merchant_id', 'id');
客户反馈评论

 ::::::::::::::::::::::::::::::::::::::: 

class ClientFeedbackReviews extends Model {

protected $table = 'client_feedback_merchants';
public function forMerchant() {
    return $this->belongsTo('App\Merchant', 'merchant_id', 'id');
}

public function byClient() {
    return $this->belongsTo('App\Clients', 'client_id', 'id');
}
:::::::::::::::::::::::::::::::::::::
我需要获得所有商户的平均评分(作为查询的一部分,我根据附近距离、给定位置或使用搜索字符串(取决于请求数据)计算商户的结果)

我在网上找到的几乎所有东西都试过了,但都无法从结果中获得“平均评分”的关键值

以下是我尝试过的众多解决方案之一,并粘贴在此处作为示例

 /////// query continued //////////

 $getMerchantQuery = $getMerchantQuery->with(['clientFeedbacks' => function($query) {

            $query->select(DB::raw('AVG( stars) AS average_rating'));
        }]);

 /////// query continued //////////
这就是我得到的总是空的客户反馈数组,而我想要的是平均评分

  {
"id": 1,
"user_id": 2,
"company_name": "Best Salon",
"primary_contact": "111111111",
"company_st_address": "Office # 62",
"company_location": "Abc",
"company_city": null,
"company_state": null,
"company_country": null,
"company_zip": null,
"company_lat": "27.9506",
"company_long": "82.4572",
"logo_image": "449cbdf0-12ba-11e7-bc65-b7fa1731e4d5.jpeg",
"is_fav_by_client_count": 3,
"client_feedbacks_count": 1,
"user_details": {
  "id": 2,
  "email": "client@lir.com"
},
"client_feedbacks": []
}

我们必须选择哪些选项来计算相关表格的平均值

================编辑

但是,这会返回结果,但不确定如何获得客户机_反馈键中的平均值

      $getMerchantQuery = $getMerchantQuery->with('clientFeedbacks');
作为


}好的。因此,这项工作如下所述:

我使用它的方式如下:

    //////// query continued /////////

    $getMerchantQuery = $getMerchantQuery->with('avgFeedback');

    ///////  query continued //////////

已经快三天了,还没有答复。。。
    public function avgFeedback() {

    return $this->hasMany('App\ClientFeedbackReviews', 'merchant_id', 'id')
                    ->selectRaw('merchant_id,AVG(client_feedback_merchants.stars) AS average_rating')
                    ->groupBy('merchant_id');
}

public function getavgFeedbackAttribute() {
    // if relation is not loaded already, let's do it first
    if ($this->relationLoaded('commentsCount'))
        $this->load('avgFeedback');

    $related = $this->getRelation('avgFeedback');

    // then return the count directly
    return ($related) ? (int) $related->average_rating : 0;
}
    //////// query continued /////////

    $getMerchantQuery = $getMerchantQuery->with('avgFeedback');

    ///////  query continued //////////