mysql - laravel 关系 hasMany 访问器 count()

标签 mysql laravel-5 eloquent relational-database

我有这些模型

机器:

->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”访问器而不是查询构建器“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();
}

关于mysql - laravel 关系 hasMany 访问器 count(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42502916/

相关文章:

Laravel:在 if-else 条件下扩展不同的布局

PHP Laravel : How to Avoid duplicate data while importing xl/csv into mysql?

database - Laravel Eloquent - 选择连接,其中列文本类似于其他表中的列文本

mysql - 是否可以通过主键的一部分对 DQL 查询进行分组并返回具有 max() 日期时间记录(早于引用日期)的记录?

php - 在 mysql json 列中搜索

php - Laravel 5 与 PostgreSQL

php - 从不同的关系中获取最新的 eloquent laravel

laravel - 如何使用左连接和内连接编写 Laravel 查询?

javascript - 这段jquery ajax代码正确吗?

mysql - SQL UPDATE 的改进