Laravel Доступ к многим полиморфным объектам

У меня есть эта таблица:

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

permissable_type может быть чем угодно. Вот как я контролирую разрешения для определенных способностей. Одним из возможных permissable_types является App \ Models \ Product. Если пользователь может использовать только 2 из 5 продуктов, в таблице user_permissions будет 2 строки. Каков наилучший способ получить эти 2 разрешения?
я имею return $this->hasMany('UserPermission');
Это дает мне 2 объекта userPermission, но я хочу получить набор продуктов, а не UserPermissions. Каков наилучший способ сделать это?

Я на Laravel 5.0

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');
}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]