自定义拉拉维尔关系?
假设情况:假设我们有3个模型:
User
Role
Permission
我们还假设 与 具有多对多关系,并且 与 具有多对多关系。User
Role
Role
Permission
所以他们的模型可能看起来像这样。(我故意让它们保持简短。
class User
{
public function roles() {
return $this->belongsToMany(Role::class);
}
}
class Role
{
public function users() {
return $this->belongsToMany(User::class);
}
public function permissions() {
return $this->belongsToMany(Permission::class);
}
}
class Permission
{
public function roles() {
return $this->belongsToMany(Role::class);
}
}
如果您想获得用户的所有权限
,该怎么办
?没有 .BelongsToManyThrough
看起来好像你被困在做一些感觉不太对的事情上,并且不能与或这样的东西一起工作。User::with('permissions')
User::has('permissions')
class User
{
public function permissions() {
$permissions = [];
foreach ($this->roles as $role) {
foreach ($role->permissions as $permission) {
$permissions = array_merge($permissions, $permission);
}
}
return $permissions;
}
}
这个例子,只是一个例子,不要读太多。关键是,如何定义自定义关系?另一个例子可能是Facebook评论与作者母亲之间的关系。很奇怪,我知道,但希望你明白了。自定义关系。如何?
在我看来,一个好的解决方案是用类似于描述Laravel中任何其他关系的方式来描述这种关系。返回雄辩的东西。Relation
class User
{
public function permissions() {
return $this->customRelation(Permission::class, ...);
}
}
这样的事情已经存在了吗?