У меня есть связь User hasOne Position
, и я выбираю пользователей, но я хочу отсортировать их сначала по Position->name
, а затем по User->name
. Я попробовал следующее
<?php
$sorted = Position::where('groupId', $this->groupId)
->whereIn('id', $positions)
->with(['user' => function($query) {
$query->orderBy('user.name'); // internal sort
}])
->orderBy('position.name') // external sort
->get();
Таким образом, результаты сортируются только по внешней сортировке или по позиции-> имя. Разные пользователи с одинаковыми позициями-> именами перечислены в несортированном виде. Если я удаляю внешнюю сортировку и оставляю только имя пользователя sortBy->, оно работает, НО только для имен, а позиции случайные.
Я пробовал разные способы
- установка порядка в отношении
Position->user
, не работает - установка порядка в отношении
User->position
, не работает - определение только внешнего
orderBy('position.name, user.name')
, вылетает, говоря пользовательская таблица отсутствует в запросе.
Я также пытался ответить на подобные вопросы, такие как
, но, похоже, они не пытаются отсортировать результаты как по родителю, так и по взаимосвязи. Кажется, мое единственное решение - просмотреть результаты и отсортировать их в PHP вместо базы данных, но это звучит глупо.
Пожалуйста, совет, спасибо.