169 похожих чатов

Т.Е. на один тип грузовика, один перевозчик и тебе надо

вывести все типы грузовиков, сортировкой по имения перевозчика?

16 ответов

10 просмотров

У меня всё сделано ровно так, как описано в этой статье. Или это бот?

Egor-Gruzdev Автор вопроса

приводимые тобой примеры, говорят о том , что ты не читал статью по ссылке

Спасибо, добился искомого. Первый вариант с джойном очевидный, я так раньше и делал, но потом перестал, ибо тогда непонятно, почему сразу в DB::Select не подать готовый запрос, который будет лучше читаться. Второй вариант интереснее, но надо подумать, насколько будет хорош запрос вида: select * from "vehicle_types" order by (select "name" from "carriers" where "carriers"."id" = "vehicle_types"."carrier_id") asc, "id" asc А ещё интересный момент, что у меня есть рабочий кусок кода, который почему-то работает: $res = Vehicle::with('matches_color', 'vehicle_type') ->with('carrier', function ($q) { $q->orderBy('name'); }) ->whereHas('carrier', function ($q) { $q->where('user_id', '=', '2'); }) ->orderBy('id') ->get(); Хотя в нём нет ни массива, и он идёт в разрез со статьёй. Надо будет этот кусок переделать, а то как бы он однажды не перестал работать. Ещё раз спасибо.

Egor-Gruzdev Автор вопроса

приведённый тобой пример: ->with('carrier', function ($q) { $q->orderBy('name'); }) зачем здесь сортировка, если там всего одна позиция, а не множество и в твоем примере работает только одна сортировка, по id по поводу join и подзапроса в статье четко указано, что join 1ms, а подзапрос 60ms, разница очевидна

"зачем здесь сортировка, если там всего одна позиция, а не множество" Это недопонимание парадигмы ORM. Если пойти от модели (обзову её $v), то мы её получаем всю, целиком, т.к. не ограничиваем в выборке. Чтобы добраться до моделей, с которыми есть отношения, достаточно обратиться к отношению, как к полю: $v->carrier->name. В этот момент ORM полезет в БД за данными. Чтобы не лезть за данными, применяем with, тогда ORM всё запрашивает изначально и кладёт по полочкам. Да вот беда, порядок полочек определяется моделью $v, и сортировать мы можем только её собственные полочки: $v->orderBy. Не знаю, как для кого, но для меня документация является скудной. Про orderBy написано, что этот метод позволяет сортировать результаты и принимает два параметра, но не понятно, что возвращает. В обсуждаемом нами случае имеет место метод тыка. Видно, что вторым параметром мы передаём коллбек, который возвращает что-то, о чём документация умалчивает, но позволяет сортировать данные. Иногда этот метод приводит к результатам,

открываем апи доку

Ты хочешь сказать, что он сортирует Venicle по полю Carrier::name?

Вся шутка юмора в том, что для Eloquent Builer (Класс Illuminate\Database\Eloquent\Builder) не описан метод orderBy. Только enforceOrderBy()

а ниче что элок наследует кври?)

Join соединяет две таблицы и сортировка идёт по этому соединению

елка тебе не сделает жоин, оно для связи сделает два отдельных запроса и кодом построит дерево

$res = Vehicle::with('matches_color', 'vehicle_type') ->with('carrier', function ($q) { $q->orderBy('name'); }) ->whereHas('carrier', function ($q) { $q->where('user_id', '=', '2'); }) ->orderBy('id') ->get(); Тут?

Ну может до этого можно догадаться, если посмотреть в сырцы.

Стикер

Мы о вот этой статье: https://laravel.demiart.ru/ordering-by-relationship-columns/#belongsTo

Похожие вопросы

Обсуждают сегодня

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Добрый день подскажите пожалуйста может кто то сталкивался с ошибками Sentry 22.10.0 развернутым из helm чарт в Kubernetes? Изначально 3 дня назад очень стало много событий ух...
Tire4 Finist Devops
1
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
почому оно не работает?
Vi Chapmann Chapmann
19
всем привет почти закончил курс После него можно писать свою операционку? Какие библиотеки надо использовать и куда дальше копать для изучения
Linus
19
Так а кто может спарсить всех участников чата? Идишники
Magic
18
Карта сайта