Как я могу сделать заказ перед группой в laravel?

Мой случай такой же, как этот: Сортировка данных (порядок) перед группировкой в ​​mysql

Я пробую все ответы там и нахожу лучший ответ от @Justin

Ответ в mysql такой:

SELECT t1.*
FROM prd_data t1
WHERE t1.id = (SELECT t2.id
               FROM prd_data t2
               WHERE t2.sub_prd_id= t1.sub_prd_id
               ORDER BY t2.created_at DESC
               LIMIT 1)

Я попробовал sql-запрос, и он работает

Но как преобразовать запрос sql в красноречивый laravel?

Мне трудно преобразовать sql-запрос в красноречивый laravel. Потому что запрос очень сложный

Как я могу решить эту проблему?


person Success Man    schedule 04.10.2017    source источник
comment
Зачем тебе переводить его в красноречивый? Вы можете просто создать представление MySQL и использовать красноречивую модель с этим представлением. Скрыть сложность запроса. Ничего не выиграешь, если честно перепишешь это в красноречивый.   -  person Mjh    schedule 04.10.2017
comment
@Mjh, что ты имеешь в виду? Попробуйте ответить кодом. Позвольте мне легко понять вашу точку зрения   -  person Success Man    schedule 04.10.2017
comment
Я думал, вы знакомы с MySQL и что такое представление. Я не буду предоставлять код для копирования и вставки для использования людьми, если они не понимают основных концепций. Я не думаю, что это продуктивно или стоит затраченных усилий. Я предлагаю вам осмотреться, чтобы увидеть, что такое представление, тогда вы, скорее всего, получите то, что я пытаюсь предложить.   -  person Mjh    schedule 04.10.2017
comment
@Mjh, кажется, меня не интересует использование представления. я хочу использовать красноречивый laravel   -  person Success Man    schedule 04.10.2017
comment
Хорошо, нет проблем, в любом случае нет причин использовать более простой и чистый подход :) удачи!   -  person Mjh    schedule 04.10.2017


Ответы (2)


Вы можете просто использовать DB::select(), если хотите использовать sql-запрос

DB::select("SELECT t1.* FROM prd_data t1 WHERE t1.id = (SELECT t2.id
           FROM prd_data t2
           WHERE t2.sub_prd_id= t1.sub_prd_id
           ORDER BY t2.created_at DESC
           LIMIT 1)");
person Kapil Parajuli LaraTuts    schedule 04.10.2017

$whereClause = DB::table(‘prd_data’)->where(t2.sub_prd_id, t1.sub_prd_id)->orderBy(’t2.created_at’,’desc’)->take(1)->get();

$result = DB::table(‘prd_data')->where(t1.id,$whereCond.id)->get();

надеюсь, что это работает :)

person Susy Valentina Rahardjo    schedule 04.10.2017
comment
Кажется, это будет ошибка. Потому что сначала он запустится $whereClause. Пока внутри $whereClause, t1.sub_prd_id не имеет значения. Я еще не пробовал. Но похоже ошибка - person Success Man; 04.10.2017