У меня есть 3 таблицы (пользователи, основные меню, подменю). каждая из этих таблиц содержит столбец role_id. в таблицах меню (main & sub) у меня есть элементы, которые нужно показать всем пользователям (независимо от того, что такое user_role), и элементы, которые нужно показать для определенных c пользователей (некоторые для администраторов, некоторые для обычных пользователей). теперь, когда администратор вошел в систему, я хочу собрать результат меню, которое содержит публичные c меню, а также меню, указанные для роли администратора. и когда пользователь вошел в систему, я хочу собрать результаты меню, которые содержат публичные c меню, а также меню, указанные для обычных пользователей. ПРИМЕЧАНИЕ: меню и подпрограммы, предназначенные для всех пользователей, не имеют role_id (role_id=NULL
), меню и подпрограммы для администраторов имеют role_id=1
меню, а подпрограммы для обычных пользователей имеют role_id=8
. Я пишу следующий код, но этот дает только меню с указанным c role_id, я хочу объединить меню и подсети с role_id=NULL
результатом.
public function MenuPicker(User $user)
{
//get role of logged in user
$role = $user->role()->first();
//get menus of user related to role
return $role->main_menus()->with('sub_menus')->get();
}
это класс главного меню:
public function role()
{
return $this->belongsTo(Role::class);
}
public function sub_menus()
{
return $this->hasMany(UserSubMenu::class);
}
и это класс подменю:
public function main_menu()
{
return $this->belongsTo(UserMainMenu::class);
}
с нетерпением жду ответа от вас. спасибо.