Я пытаюсь рассчитать средние оценки связанного столбца. Отношение (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
}
]
}