与三张桌子的许多关系

时间:2020-10-18 18:50:38

标签: php laravel eloquent

我具有以下结构:

Action
-id
-name
-type

Routes
-id
-name
-controllers

User
-id
-name
-email
-password
-usergroup_id

Usergroup
-id
-name
-tenant_id

我想建立一种关系,我可以知道用户可以在特定路线上执行哪些操作,并且对于用户组也可以这样做,因为如果用户没有该操作,那么他所在组的操作将是已验证。

在这种情况下,我必须创建两个数据透视表吗?

Action_Routes_User
-action_id
-route_id
-user_id

Action_Routes_Usergroup
-action_id
-route_id
-usergroup_id

并在所有内容上通过belongsToMany,对吗?

我设法建立了这种关系,但是要获得X用户在给定路线中所执行的操作,这给我带来了一个问题:

// model User
public function routes()
{
return $this->belongsToMany(Route::class, 'action_route_user', 'user_id', 'route_id');
}

// model Route
public function actionsUser()
{
return $this->belongsToMany(Action::class, 'action_route_user', 'route_id', 'action_id');
}

当我执行 $ user-> routes 时,我得到了与该用户相关的所有路由,确定...

但是,例如,当我从上述集合中选择路线时:

$routes = $user->routes;
foreach($routes as $route) {
   $routeActions = $route->actionsUser;

   // here it is getting all actions regardless of user ID
}

示例:我登录的用户: Josef ,它采用了他拥有权限的路由 josef-> routes

但是当我选择以下一条路线时: $ route-> actionsUser ,这就像是在数据透视表 action_route_user 中查找所有用户操作,而不仅仅是用户:约瑟夫

我认为在提取此数据透视表时,缺少 user_id ,如果有的话,还有什么更好的放置方法?

0 个答案:

没有答案
相关问题