通过 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();
有不同类型的看板,类型可以有多个看板,看板有多个用户。
任务:获取特定登机类型的用户数。
类型登机模型:
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();