belongsToMany 没有 return 预期的查询
belongsToMany doesn't return the expected query
在我的应用程序中,我有一个名为 users
的 table,每个用户可以拥有一个或多个角色 (I'm using laratrust),在这种情况下,我将涵盖 tenant
和 patient
角色。
包 santigator/laratrust 处理此 table 中的角色:
- 角色: 所有角色可用
- role_user:枢轴table
现在,我的应用程序允许 patient
用户邀请其他用户注册该应用程序,他们将自动拥有 tenant
的角色。 patient
用户还必须为受邀用户关联一个或多个 riskareas
。这样,“租户”将只能访问 patient
用户的某些区域。
我在invites
table中处理了上面的情况,这是设计说明比较好:
这里的问题是我们有一个管理多个角色(patient
和 tenant
)的单一用户模型,我必须确保用户模型能够 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
在我的应用程序中,我有一个名为 users
的 table,每个用户可以拥有一个或多个角色 (I'm using laratrust),在这种情况下,我将涵盖 tenant
和 patient
角色。
包 santigator/laratrust 处理此 table 中的角色:
- 角色: 所有角色可用
- role_user:枢轴table
现在,我的应用程序允许 patient
用户邀请其他用户注册该应用程序,他们将自动拥有 tenant
的角色。 patient
用户还必须为受邀用户关联一个或多个 riskareas
。这样,“租户”将只能访问 patient
用户的某些区域。
我在invites
table中处理了上面的情况,这是设计说明比较好:
这里的问题是我们有一个管理多个角色(patient
和 tenant
)的单一用户模型,我必须确保用户模型能够 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