假设情况:假设我们有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);
}
}
What if you wanted to get all the 100s for a 101?没有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;
}
}
这个例子只是一个例子,不要读太多.关键是,你如何定义一个custom人的关系?另一个例子可能是facebook comments 与作者母亲之间的关系.奇怪,我知道,但希望你能明白.自定义关系.怎样
在我看来,一个很好的解决方案是,用类似于描述拉威尔中任何其他关系的方式来描述这种关系.返回一个Eloquent 的Relation
.
class User
{
public function permissions() {
return $this->customRelation(Permission::class, ...);
}
}
Does something like this already exist?