Laravel 访问一对多多态对象
Laravel Accessing One To Many polymorphic objects
我有这个table:
user_permissions
----------------
id
user_id
permissable_id
permissable_type
permissable_type 可以是任何东西。这就是我控制某些能力权限的方式。可能的 permissable_type 之一是 App\Models\Product。如果用户只能使用 5 种产品中的 2 种,则 user_permissions table 中将有 2 行。获得这 2 个权限的最佳方式是什么?
我有 return $this->hasMany('UserPermission');
这为我提供了 2 个 userPermission 对象,但我想获取 Products 而不是 UserPermissions 的集合。最好的方法是什么?
我在Laravel 5.0
你的 user_permissions table 设置得像 polymorphic relationship。这些字段已经正确命名和一切。如果你有这个关系设置,这应该很容易。
听起来您正在为特定用户寻找一组产品。以这种方式表达它会让您获得所需的代码:
// "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');
}
}
我有这个table:
user_permissions
----------------
id
user_id
permissable_id
permissable_type
permissable_type 可以是任何东西。这就是我控制某些能力权限的方式。可能的 permissable_type 之一是 App\Models\Product。如果用户只能使用 5 种产品中的 2 种,则 user_permissions table 中将有 2 行。获得这 2 个权限的最佳方式是什么?
我有 return $this->hasMany('UserPermission');
这为我提供了 2 个 userPermission 对象,但我想获取 Products 而不是 UserPermissions 的集合。最好的方法是什么?
我在Laravel 5.0
你的 user_permissions table 设置得像 polymorphic relationship。这些字段已经正确命名和一切。如果你有这个关系设置,这应该很容易。
听起来您正在为特定用户寻找一组产品。以这种方式表达它会让您获得所需的代码:
// "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');
}
}