Ниже приведен мой запрос, который работает отлично, он дает ожидаемый результат, но меня не устраивает то, как я разбил запрос на 3 части.
Как я могу объединить этот запрос, например не разбивая его на части?
$assignedMenusQuery = Branch::with(['menus' => function($query) {
$query->where('menus.status', true);
}])
->where('id', $branch->id)
->first();
if($assignedMenusQuery)
{
$assignedMenus = $assignedMenusQuery->menus->pluck('id')->toArray();
}
$assignedButSharedMenusQuery = Branch::with(['menus' => function($query) {
$query->where('menus.shared', true)
->where('menus.status', true);
}])
->whereNotIn('id', [$branch->id])
->first();
if($assignedButSharedMenusQuery)
{
$assignedButSharedMenus = $assignedButSharedMenusQuery->menus->pluck('id')->toArray();
}
$assignedButNotSharedMenusQuery = Branch::with(['menus' => function($query) {
$query->where('menus.shared', false)
->where('menus.status', true);
}])
->whereNotIn('id', [$branch->id])
->first();
if($assignedButNotSharedMenusQuery)
{
$assignedButNotSharedMenus = $assignedButNotSharedMenusQuery->menus->pluck('id')->toArray();
}
$menus = Menu::whereIn('id', array_merge($assignedMenus, $assignedButSharedMenus))->whereNotIn('id', $assignedButNotSharedMenus)->get();
Подробнее здесь: https://stackoverflow.com/questions/648 ... uent-query