У меня есть отношения на User
модель, как показано ниже:
public function brands() {
$roles = config('constants.roles');
if ($this->hasRole($roles['brand_site_admin'])) {
return $this->belongsToMany(Brand::class, 'brand_has_users');
} else
if ($this->hasRole($roles['client_admin'])) {
return $this->belongsToMany(Brand::class, 'brand_has_client_admin');
}
// For admin role I want to return all brands, from Brand Model
// ??
}
Для роли администратора я хочу вернуть все строки из Brand
модель, как я могу получить это?
И это должно быть примером BelongsToMany
класс, тогда только это не будет нарушать код в моем контроллере.
Когда я делаю $user->brands()
Я хочу, чтобы все бренды из brands
таблица, если $user
является администратором (в приведенном выше коде, если он не работает ни при каких условиях, то это администратор).
Я думаю, что вы должны попробовать это, как предложено в этот ТАК пост, сначала создайте такие отношения
$roles = config('constants.roles');
public function siteAdminBrands()
{
return $this->hasMany(Brand::class, 'brand_has_users');
}
public function clientAdminBrands()
{
return $this->hasMany(Brand::class, 'brand_has_client_admin');
}
public function brands($query)
{
return $query
->when($this->hasRole($roles['brand_site_admin']),function($q){
return $q->with('siteAdminBrands');
})
->when($this->hasRole($roles['client_admin']),function($q){
return $q->with('clientAdminBrands');
});
}
}
Других решений пока нет …