belongsToMany 没有 return 预期的查询

belongsToMany doesn't return the expected query

在我的应用程序中,我有一个名为 users 的 table,每个用户可以拥有一个或多个角色 (I'm using laratrust),在这种情况下,我将涵盖 tenantpatient 角色。

santigator/laratrust 处理此 table 中的角色:

现在,我的应用程序允许 patient 用户邀请其他用户注册该应用程序,他们将自动拥有 tenant 的角色。 patient 用户还必须为受邀用户关联一个或多个 riskareas。这样,“租户”将只能访问 patient 用户的某些区域。

我在invitestable中处理了上面的情况,这是设计说明比较好:

这里的问题是我们有一个管理多个角色(patienttenant)的单一用户模型,我必须确保用户模型能够 return tenant 与患者相关联,反之亦然。

所以我虽然在 User 模型中声明了两种方法:patients()tenants(),但我从 patients 方法开始:

public function patients()
{
    return $this->belongsToMany(User::class, 'invites')->withPivot('tenant_id');
}

当我这样做时:

dd(auth()->user()->patients()->toSql());

它 return 是以下查询:

"select * from `users` inner join `invites` on `users`.`id` = `invites`.`user_id` where `invites`.`user_id` = ? and `users`.`deleted_at` is null"

其中return是一个空集合,查询应该return这个:

"select * from `users` inner join `invites` on `users`.`id` = `invites`.`user_id` where `invites`.`tenant_id` = ? and `users`.`deleted_at` is null"

我不确定我是否正确处理了这种情况。有人可以帮我解决这个问题吗?

亲切的问候

更新

return $this->hasManyThrough(
    User::class,
    Invite::class,
    'tenant_id',
    'id',
    '123',
    'user_id'
);

结果:

"select * from `users` inner join `invites` on `invites`.`user_id` = `users`.`id` where `invites`.`tenant_id` is null and `users`.`deleted_at` is null and `invites`.`deleted_at` is null"

为什么:where 邀请.tenant_id is null

您的外键有问题:

public function patients()
{
    return $this->belongsToMany(User::class,'invites', 'user_id', 'tenant_id');
}

关于 belongsToMany 的更多信息:https://laravel.com/docs/8.x/eloquent-relationships#many-to-many-model-structure