我有这些模型

机:

->id
->...


服务器

->id
->machine_id
->is_suspended


与机器模型的关系:

public function servers()
{
    return $this->hasMany('App\Server');
}

//with suspended servers
public function getFreePortsAmountAllAttribute()
{
    return $this->servers->count();
}

//without suspended servers
public function getFreePortsAmountAttribute()
{
    return $this->servers->where('servers.is_suspended', false)->count();
}


使用此关系,当我创建2台服务器(1台已挂起,1台未挂起)并调用时:

dd(Machine::find(1)->free_ports_amount);


返回0,因此由于某种原因,访问器不起作用。知道为什么吗?

最佳答案

您正在调用“服务器”访问器而不是查询生成器“ servers()”,请尝试以下更改:

//with suspended servers
public function getFreePortsAmountAllAttribute()
{
    return $this->servers()->count();
}

//without suspended servers
public function getFreePortsAmountAttribute()
{
   return $this->servers()->where('is_suspended', false)->count();
}

10-08 15:23