Laravel访问一对多多态对象


Laravel Accessing One To Many polymorphic objects

我有这个表:

user_permissions
----------------
id
user_id
permissable_id
permissable_type

permissionable_type可以是任何值。这就是我控制某些能力的权限的方式。一种可能的permissable_types是App''Models''Product。如果用户只能使用5种产品中的2种,那么user_permissions表中将有2行。获得这两个权限的最佳方式是什么
我有return $this->hasMany('UserPermission');这给了我2个userPermission对象,但我想得到一个Products集合,而不是UserPermissions。最好的方法是什么?

我在Laravel 5.0 上

您的user_permissions表设置为多态关系。字段的名称已经正确,并且所有内容都已正确命名。如果你有这样的关系设置,这应该很容易。

听起来你是在为一个特定的用户寻找一套产品。用这种方式表达可以让你找到你需要的代码:

// "I want Products that have a specific user"
$products = 'App'Models'Product::whereHas('permissions.user', function($q) use ($user) {
    $q->where('id', $user->id);
});

如果你的关系还没有建立起来,这是一个他们会是什么样子的想法:

class UserPermission {
    public function user() {
        return $this->belongsTo(User::class);
    }
    public function permissable() {
        return $this->morphTo();
    }
}
class Product {
    public function permissions() {
        return $this->morphMany(UserPermission::class, 'permissable');
    }
}