Неверный результат при попытке сортировки строк по дате - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть пользовательский код для получения заказов пользователей по столбцу 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();
});

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

Ответы [ 4 ]

0 голосов
/ 28 ноября 2018

Попробуйте этот запрос, может быть, он работает для вас:

$query = App\Customer::join('users as user', 'user.id', '=', 'customers.user_id')
                     ->orderBy('user.updated_at', 'desc')
                     ->select('customers.*')->get();
0 голосов
/ 28 ноября 2018

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

$customers = \App\Customer::whereHas('user', function ($query) {
             $query->orderBy('users.updated_at', 'DESC');
        })->get();
0 голосов
/ 28 ноября 2018

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

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

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

0 голосов
/ 28 ноября 2018

Предполагая, что вы хотите отсортировать своих клиентов, а не отношение 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...