我无法在任何地方找到有关如何使用您的Eloquent ORM模型的多个中间表的信息。我面临的问题是我有一个表用于我的用户,权限和角色。这些是4个表格:
权限:
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
,因此它的布局无关紧要。)
所以问题是我希望能够在从User模型调用时从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和Permission开始获取数据。我希望答案可以帮助我指定所需的所有模型。
答案 0 :(得分:2)
Eloquent关系作为对象属性而不是函数来访问。
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
。