通过 Laravel 关系计算元素数量

Count number of elements via Laravel relationship

有不同类型的看板,类型可以有多个看板,看板有多个用户。

任务:获取特定登机类型的用户数。

类型登机模型:

class BoardingType extends Model
{
    public function boardings()
    {
        return $this->hasMany(Boarding::class, 'type');
    }
}

登机模型:

class Boarding extends Model
{
    public function users()
    {
        return $this->hasMany(User::class, 'boarding');
    }
}

如何简洁地获取所有登机类型的用户?

以类似的形式制作,我不喜欢实现:

foreach ($types as $type) {
    $usersCount = 0;
    foreach ($type->boardings as $boarding) {
        $usersCount += $boarding->users()->count();
    }
}

您可以在此处使用 has-many-through 关系。
在您的 BoardingType 模型中

  public function users()
    {
        return $this->hasManyThrough(User::class, Bording::class);
    }

请注意,如果您的模型不遵循 laravel key convention:

,您可能必须指定 fk
 public function users()
    {
        return $this->hasManyThrough(
            User::class,
            Bording::class,
            'bording_type_id', // Foreign key on the boarding table...
            'boarding_id', // Foreign key on the users table...
            'id', // Local key on the bording type table...
            'id' // Local key on the boarding table...
        );
    }

您可以像这样计算绑定类型的用户数量:

$usersCount = $bordingType->users()->count();