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

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

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

16 ответов

25 просмотров

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

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта