Laravel 5.7 - "OrderBy" не сортирует результаты - PullRequest
0 голосов
/ 27 ноября 2018
  1. У меня есть три модели, связанные через отношение hasMany: Course / Lesson / Article - A Course hasMany Lessons hasMany Articles.

  2. В моей таблице articles есть столбец int с именем pos (сокращение от позиции), и я хочу упорядочить по нему статьи.

  3. Я использую следующий запрос в своем CoursesController, но он не сортирует статьи по этому атрибуту pos:

    публичная функция show (курс $ Course, уроки $ Lesson, Article $ Articles) {$ статьи= $ lesson-> article () -> orderBy ('pos', 'asc') -> get ();обратный просмотр («users.courses.show», компактный («курс», «уроки», «статьи»));}

Я использую цикл foreach в лезвии:

@foreach($lesson->articles as $article)
   {{ $article->title }}
@endforeach

Любая помощь будет признательна!

Панель отладки Laravel показывает следующий результат:

select * from articles, где slug = предел "this-is-article-one" 1 13.27ms \ vendor \ laravel\ framework \ src \ Illuminate \ Routing \ ImplicitRouteBinding.php: 35

select * from articles, где lesson_id = 1 и pos <2, порядок <code>pos desc предел 1 660 мкс \ app \Http \ Controllers \ Users \ ArticlesController.php: 55

выберите * из articles, где lesson_id = 1 и pos> 2 порядка по pos asc limit 1 520μs \ app \ Http \ Controllers\ Users \ ArticlesController.php: 59

выберите * из courses, где courses. id = 2 ограничения 1 610 мкс. View: users.articles.show: 7

выберите* из lessons, где lessons. id = 1 предел 1 530 мкс. view: users.articles.show: 8

выберите * из articles, где articles. lesson_id = 1и articles. lesson_id не равно нулю

Ответы [ 2 ]

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

Если вы хотите продолжить использовать объект lesson в своем представлении, используйте sortBy:

@foreach($lesson->articles->sortBy('pos') as $article)
   {{ $article->title }}
@endforeach
0 голосов
/ 27 ноября 2018

Когда вы снова вызываете $lesson->articles в представлении шоу, в основном вы делаете новый вызов БД.Чтобы получить правильные значения, используйте переменную $articles:

@foreach($articles as $article)
   {{ $article->title }}
@endforeach
...