我参加的会议有两种注册类型:“普通”和“加号”。
常规注册类型的容量为“ 100”。
加号注册类型的容量为“ 50”。
因此,会议的总容量为“ 150”。
但是我使用下面的代码获得了“ 1080”,而不是“ 150”。您知道问题出在哪里吗?
public function stats($id)
$conference = Conference::where('id',$id)->firstOr(function(){
return redirect('/');
});
$conferenceID = $conference->id;
$capacityOfRegistrationTypes = RegistrationType::with('conferences')->sum('capacity');
dd($capacityOfRegistrationTypes);
}
答案 0 :(得分:0)
您正在汇总所有注册类型的容量,而不考虑会议。那可能不是您想要的。我不知道您的桌子是什么样子或它们的位置,所以我假设您有多个会议,每个会议的注册类型都有多个条目。
您应该采用另一种方法:
$conferences = Conference::with('registrationTypes')->get();
现在要获得每个会议的容量,您可以执行以下操作:
$conferences->mapWithKeys(function ($conference) {
return [ $conference->id => $conference->registrationTypes->sum('capacity') ];
});
要针对特定会议执行此操作,您可以编写:
$capacity = Conference::with('registrationTypes')->find($id)->registrationTypes->sum('capacity');
这将为您提供一个数组,该数组以会议ID为键,容量为值。
如果您想按目前的方式进行操作,则可以限制查询:
$capacityOfRegistrationTypes = RegistrationType::with('conferences')
->whereHas('conferences', function ($query) use ($id) {
$query->id = $id;
})
->sum('capacity');