user(); $orderBy = <<<'MySQL' CASE WHEN task_status = 1 THEN 100 ELSE 0 END MySQL; /** @var \Illuminate\Database\Eloquent\Collection */ $tasks = Task::with(['taskable']) ->whereHasMorph( 'taskable', [TaskHygiene::class, TaskLedger::class], function (Builder $query, string $type) use ($user) { switch ($type) { case TaskLedger::class: case TaskHygiene::class: if ($user->isStoreMaster()) { $query->where('store_id', $user->store_id); } else { $query->whereRaw('1!=1'); } break; } } ) ->orderBy(DB::raw($orderBy), 'DESC') ->orderBy('start_at', 'ASC') ->orderBy('end_at', 'ASC') ->simplePaginate($request->query('per_page', 20)); return TaskResource::collection($tasks); } }