Laravel在那里依靠多对多的关系

时间:2016-05-15 13:10:18

标签: php laravel

在我当前的项目中,User可以加入许多Organisations,反之亦然 - 这是多对多关系的一个例子。我正在尝试计算当前未验证的用户数(用户表上的Verified列等于0)。

我的User型号:

/**
 * Get the organisations that the user is a part of.
 */
public function organisation()
{
    return $this->belongsToMany(
        Organisation::class, 'organisation_users', 'user_id', 'organisation_id'
    )->withPivot(['role'])->orderBy('name', 'asc');
}

我的Organisation型号:

/**
 * Get all of the users that belong to the organisation.
 */
public function users()
{
    return $this->belongsToMany(
        User::class, 'organisation_users', 'organisation_id', 'user_id'
    )->withPivot('role');
}

因此,如果我想计算未经验证的用户数,我在Organisation模型上有以下方法:

/**
 * An organisation may have unverified users attached.
 */
public function unverifiedUsers()
{
    return $this->whereHas('users', function($query) {
        $query->where('verified', 0);
    })->get();
}

但是,正在运行dd(\App\Organisation::find($org->id)->unverifiedUsers()->count());只显示1,实际上应该有10。我错误地构建了我的关系吗?

1 个答案:

答案 0 :(得分:1)

whereHas()将返回01。它只是告诉你这样的用户是否存在。

溶剂更简单:

public function unverifiedUsers()
{
    return $this->users()->where('verified', 0)->get();
}

如果您只需要计数:

public function unverifiedUsersCount()
{
    return $this->users()->where('verified', 0)->count()->get();
}