2013-01-09 19 views
0

我无法在任何地方找到有关如何使用Eloquent ORM模型获得多个中间表的信息。我面临的问题是我有一张用于我的用户,权限和角色的表格。这些是4个表:我应该如何构建Laravel中的多个中间表的雄辩ORM模型?

权限:

id 
name 

Permission_roles:

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来掌握工作流程,所以如果我缺少一些基本的东西,那么请指出一下。根据documentation似乎我不需要为中间表创建模型。那么,我将如何指定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和权限开始获取数据。我希望答案能帮助我指定所需的所有模型。

回答

2

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

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

你可以用在dd功能上述说法得到看看吧。

guide on Eloquent Relationships应该是有帮助

编辑的问题,在绕角色选择的所有权限评论:

$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

+0

谢谢,我一回家就会阅读该指南! – Niklas

+0

不客气。另外,请注意,Laravel有许多关系表名称的约定。请参阅此链接以了解如何命名它们:http:// laravel。com/docs/database/eloquent#多对多 – bilalq

+0

我调整了我的模型,以便它们现在可以正确连接,但我只能从一个角色中选择所有权限('$ roles = User :: find(1 ) - > permission_roles() - > first() - > permissions;')如何选择所有连接角色的所有权限? – Niklas