计算参考的总容量

时间:2018-07-31 13:48:42

标签: laravel

我参加的会议有两种注册类型:“普通”和“加号”。

常规注册类型的容量为“ 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);
}

1 个答案:

答案 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');