В конференции участвует 1 регистрация с 2 участниками, поэтому база данных выглядит следующим образом.
стол регистрации
id conference_id user_that_did_registration
1 1 1
стол участников
id registration_id registration_type_id
4 4 1
5 4 1
таблица типов регистрации
id name conference_id price
1 general 1 10
Я хочу получить общую стоимость регистрации с идентификатором «1», которая должна составлять 20, потому что есть 2 участника, каждый из которых связан с типом регистрации «1», который имеет цену 10.
У меня есть этот код, но дд (всего $) показывает 40 вместо 20. Знаете почему?
$registrationTypeDetails = Registration::with(['participants.registration_type',
'participants' => function ($query) use ($regID) {
$query->select('id', 'registration_type_id', 'registration_id')->where('registration_id', $regID);
}
])->find($regID);
if ($registrationTypeDetails->user_that_did_registration != $user_id) {
return redirect('/');
} else {
$total = 0;
$type_counts = [];
foreach ($registrationTypeDetails->participants as $p) {
$name = $p->registration_type->name;
if (!isset($type_counts[$name])) {
$type_counts[$name] = 0;
}
$type_counts[$name]++;
}
dd($registrationTypeDetails->participants);
foreach ($registrationTypeDetails->participants as $participant) {
$total += $participant->registration_type->price * $type_counts[$name];
}
dd($total); // shows 40 not 20
}
Показывает $ registrationTypeDetails:
Registration {#290 ▼
#relations: array:1 [▼
"participants" => Collection {#299 ▼
#items: array:2 [▼
0 => Participant {#306 ▼
#relations: array:1 [▼
"registration_type" => RegistrationType {#311 ▶}
]
}
1 => Participant {#308 ▼
#relations: array:1 [▼
"registration_type" => RegistrationType {#311 ▼
#attributes: array:11 [▼
"id" => 1
"name" => "general"
"price" => 10
"conference_id" => 1
]
}
]
}
]
}
]
}