Laravel Вычислить AVG связанного столбца

Я пытаюсь рассчитать средние оценки связанного столбца. Отношение (1-> много) находится между моделями Merchant и ClientFeedbackReviews.

Модель продавца

[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');
}
:::::::::::::::::::::::::::::::::::::

Мне нужно получить средние оценки всех продавцов (как ЧАСТЬ запроса, где я вычисляю результаты — продавцов в соответствии с ближайшими расстояниями, заданным местоположением или с использованием строки поиска в зависимости от данных запроса)

Я перепробовал почти все, что нашел в Интернете, но не смог получить ключ-значение «average_ratings» в результатах.

Вот одно из многих решений, которые я пробовал и вставил сюда в качестве примера.

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

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

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

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

и это то, что я получаю ВСЕГДА - пустой массив для client_feedbacks, тогда как я хочу, чтобы средний_рейтинг был прямо здесь.

  {
"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": "[email protected]"
},
"client_feedbacks": []

}

Какие варианты у нас есть для расчета среднего значения связанной таблицы?

============ РЕДАКТИРОВАТЬ

Однако это возвращает результаты, но не уверен, как получить СРЕДНЕЕ значение в ключе client_feedbacks.

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

as

{
"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": "[email protected]"
},
"client_feedbacks": [
  {
    "id": 1,
    "client_id": 1,
    "merchant_id": 1,
    "stars": 4,
    "review_notes": "good client",
    "created_at": null,
    "updated_at": null
  }
]

}


person Zee    schedule 14.04.2017    source источник
comment
Прошло почти 3 дня, а ответа нет...   -  person Zee    schedule 17.04.2017


Ответы (1)