Неправильный результат при попытке получить строки для сортировки по дате

У меня есть собственный код, чтобы пользователи заказывали по столбцу updated_at:

$customers = \App\Customer::whereHas('user', function ($query) {
   $query->orderBy('updated_at', 'DESC');
})->get();

Схема стола:

 Schema::create('customers', function (Blueprint $table) {
    $table->increments('id');
    $table->unsignedInteger('user_id');
    $table->foreign('user_id')
          ->references('id')
          ->on('users')
          ->onDelete('cascade');
    $table->string('name')->nullable();
    $table->string('lastname')->nullable();
    $table->string('surname')->nullable();
    $table->text('about')->nullable();
    $table->timestamps();
});

Вы можете увидеть результат запроса здесь. Почему я получаю неверный результат или мой запрос неверен?

предоставьте схему вашей таблицы.

Bhoomi Patel 28.11.2018 10:44

@Bhoomipatel Вы можете увидеть мою схему таблицы в обновленном вопросе. В моей таблице пользователей есть схема таблицы пользователей по умолчанию laravel.

Andreas Hunter 28.11.2018 10:55

Вы пытаетесь получить заказанные записи в соответствии с меткой времени таблицы клиентов или пользователем? @AndreasHunter

kshitij 28.11.2018 11:03

Ваш запрос неверен. Обратное отношение, если вы хотите отсортировать по пользователям updated_at

sadaiMudiNaadhar 28.11.2018 11:11

Итак, если вам нужна информация о пользователе, почему бы не вызвать от пользователей и не собрать информацию о клиентах от пользователя и не сортировать по модели пользователя напрямую. @AndreasHunter

kshitij 28.11.2018 11:31
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
5
488
4

Ответы 4

Предполагая, что вы хотите отсортировать своих клиентов, а не отношение user, вы должны использовать orderBy в результате Customer:

$customers = \App\Customer::whereHas('user')
                            ->orderBy('updated_at', 'DESC')
                            ->get();

И поскольку вы не хотите заказывать пользователей, вам не нужно использовать whereHas(). Простой has() подойдет:

$customers = \App\Customer::has('user')
                            ->orderBy('updated_at', 'DESC')
                            ->get();

у меня коллектор не работает правильно. Вы можете увидеть результаты запроса. здесь У меня в модели клиента отношения belongsTo для User eloquent, и мне нужно отсортировать по столбцу users.updated_at и получить клиентов. Действия пользователей сохранены в моей таблице users, поэтому мне нужен этот тип запроса.

Andreas Hunter 28.11.2018 11:22

попробуйте этот запрос:

$customers = \App\Customer::whereHas('user', function ($query) {
             $query->orderBy('users.updated_at', 'DESC');
        })->get();

На самом деле я подозреваю, что вы тоже пытаетесь восстановить отношения в порядке. Вам нужно быстро загрузить, заказать и использовать:

$customers = \App\Customer::with(['user' => function ($query) {
   $query->orderBy('updated_at', 'DESC');
})->whereHas('user')->get();

Это должно установить отношения и отфильтровать всех клиентов, у которых нет пользователя.

Попробуйте этот запрос, возможно, он вам подходит:

$query = App\Customer::join('users as user', 'user.id', '=', 'customers.user_id')
                     ->orderBy('user.updated_at', 'desc')
                     ->select('customers.*')->get();

Другие вопросы по теме