0

我在任何地方都找不到有关如何使用 Eloquent ORM 模型拥有多个中间表的信息。我面临的问题是我有一个用于我的用户、权限和角色的表。这些是4个表:

权限:

id
name

权限角色:

id
name

Permission_role_mappings:

id
permission_id
permission_role_id

Permission_role_user_mappings:

id
permission_role_id
user_id

(好吧,我也有一张users桌子,但它的布局并不重要,因为外键在permission_role_user_mapping.)

所以问题是我希望能够在permissions从用户模型调用时从表中获取数据。我很难完全掌握 Eloquent ORM 的工作流程,所以如果我遗漏了一些至关重要的基本内容,请指出。

根据文档,我似乎不需要为中间表创建模型。那么如何从 User 类中指定关系呢?我可以做类似的事情吗?

class User extends Eloquent {

    public function permission_role()
    {
        return $this->has_many_and_belongs_to('Permission_Role', 'permission_role_user_mappings');
    }

    public function permission()
    {
        return $this->has_many_and_belongs_to('Permission_Role', 'permission_role_user_mappings')->has_many_and_belongs_to('Permission','permission_role_mappings');
    }
}

这似乎不起作用,这是错误:

User::find(1)->first()->permission()->first();
...
Method [permission] is not defined on the Query class.

我还希望能够从 Permission_Role 和 Permission 开始获取数据。我希望答案能帮助我指定所需的所有模型。

4

1 回答 1

2

Eloquent 关系作为对象属性而不是函数来访问。

User::find(1)->first()->permission;

您可以将上述语句包装在dd函数中以查看它。

这份关于雄辩关系的指南应该会有所帮助

编辑有关选择角色中所有权限的评论中的问题:

$roles = array();
$permission_roles = User::find(1)->permission_roles()->get();
foreach ($permission_roles as $pr) {
  if (! in_array($pr->permissions)) {
    $roles[] = $pr->permissions;
  }
}

这会让你得到你想要的。但是,这最终会进行大量查询。最好利用Eager Loading这里。

于 2013-01-10T19:58:07.023 回答