2016-02-18 3 views
2

У меня есть модель, которую я хочу сортировать на основе свойства отношений.Laravel 5 Сортировка красноречивой модели с отношениями

Основная модель, Resultado, имеет отношение respondente, типа belongsTo и respondente имеет отношение usuario.

Я хочу получить Resultado с этими отношениями и отсортировать результаты по property (column).

Я попытался

$resultados = Diagnostico\Resultado::with('respondente.usuario') 
    ->orderBy('usuarios.name')->get(); 

но trows "Колонне не найден 'usuarios.name'" ошибка MySQL.

Как я могу отсортировать модель Resultado на основе ее отношений?

EDIT:

Стол для Resultado модели diag_resultados. Как я писал в комментариях, мне пришлось использовать соединение для достижения правильного результата.

ответ

3

Вы должны сделать подзапросом

$resultados = Diagnostico\Resultado::with(['respondente.usuario' => function ($query) { 
     $query->orderBy('usuarios.name', 'asc'); 
    }])->get(); 

что-то подобное должно работать

+0

Запрос был хорошо сформирован. Но результаты ('-> get()') по-прежнему не отсортированы по имени. Порядок меняется, но не находится в восходящем порядке, что странно. – Caco

+0

Фактически, результаты сортируются по 'Resultado'' id'. – Caco

+0

Я думаю, что Laravel 5 Eloquent ORM не знает, как бороться с подобластями, подобными этому, чтобы инкапсулировать такой метод orderBy в последнем соотношении и вернуться назад, чтобы отсортировать первую модель. Кто-нибудь меня исправит, если я ошибаюсь. Я решил проблему с соединением, применяемым в моей модели Eloquent. – Caco

2

Использование join вместо with работы.

$resultados = Diagnostico\Resultado::join('usuarios', 'diag_resultados.respondente_id', '=', 'usuarios.perfil_id')->get()->sortBy('name'); 
Смежные вопросы