Измените отношение на модели Министр и снимите счет. Это количество в отношениях испортит нетерпеливую загрузку. Итак:
function active(){
return $this->hasMany( Officer::class)->where('state', 'active' );
}
Теперь вы можете использовать замыкание в методе with()
, извлечь это вторичное отношение и получить счет, используя метод Larvel withCount()
.
Примерно так:
$nation = Nation::where('id', $nation_id)->with(['ministers' => function($query){
$query->withCount('active');
}])->get();
Он должен быть загружен с нетерпением, и вы можете получить доступ к активному счету через объект $nation
и его отношение, ministers
:
$activeOfficers = $nation->ministers->first()->active_count;
Это даст вам активных офицеров для первого министра этой нации. Если вы хотите сложить все из них, просто зациклите:
$totalActiveOfficersForNation = 0;
foreach($nation->ministers as $minister){
$totalActiveOfficersForNation += $minister->active_count;
}
Есть и другие способы подсчета столбцов, но это довольно просто.
Надеюсь, это поможет.