У меня есть ситуация, когда у каждого Order
может быть Feedback.
. Если продукт физический, у Feedback
может быть много packaging_feedbacks.
. Предполагается, что packaging_feedbacks
является отношением к packaging_feedback_details.
Модель обратной связи
public function packagingFeedbacks()
{
return $this->hasManyThrough('App\PackagingFeedbackDetail', 'App\PackagingFeedback',
'feedback_id', 'id', 'id', 'user_selection');
}
packaging_feedback_details
id|type_id(used to group the "names" for each feedback option)|name
1 0 well packed
2 0 bad packaging
3 1 fast shipping
4 1 express delivery
packaging_feedbacks
id|feedback_id|user_selection (pointing to the ID of packaging_feedback_details)
1 1 2
2 1 6
3 1 7
4 1 12
5 1 15
6 1 17
7 2 1
8 2 6
9 2 7
10 2 12
11 2 15
12 2 17
13 3 1
14 3 6
15 3 7
16 3 12
17 3 15
18 3 17
Теперь я хотел бы получить возможность среднего выбора пользователей для физического продукта. Я начал с использования:
$result = Product::with('userFeedbacks.packagingFeedbacks')->where('id', 1)->first();
$collection = collect();
foreach ($result->userFeedbacks as $key) {
foreach ($key->packagingFeedbacks as $skey) {
$collection->push($skey);
}
}
foreach ($collection->groupBy('type_id') as $key) {
echo($key->average('type_id'));
}
Но он возвращает не среднее значение id, поскольку вычисляет среднее значение, а не то, что мне нужно для вычисления. Есть ли лучший способ, потому что я думаю, что это не самый умный способ сделать это. Является ли дизайн моей базы данных "лучшим" способом справиться с этим?