Как сделать сортировку по условию в Laravel?
Вам нужно сделать вот такой запросSELECT * FROM users u ORDER BY CASE WHEN u.top_date > NOW() THEN u.top_date END DESC, u.balls DESC
На Laravel это будет выглядеть примерно такreturn User::where('is_deleted', '0')
      ->with(['langs', 'categories'])
      ->where('is_published', true)
      ->where('subscription', '>=', now())
      ->orderByRaw('CASE WHEN top_date > NOW() THEN top_date END DESC, balls DESC')
      ->filter($filters)
      ->paginate(15);
Предложу костыль, может у более опытных товарищей есть нормальное решение...$users = User::where('is_deleted', '0')
            ->with(['langs', 'categories'])
            ->where('is_published', true)
            ->where('subscription', '>=', now())
            ->orderBy('balls', 'DESC')
            ->filter($filters)
            ->paginate(15);
        foreach ($users as $user) {
            if ($user->top_date > Carbon::now()) {
                $users = $users->sort(function ($user) {
                    return $user->top_date;
                });
                break;
            }
        }
        return $users;