Как отсортировать элементы в алфавитном порядке после группы по Laravel? - PullRequest
0 голосов
/ 31 марта 2020

У меня есть такой красноречивый запрос:

$products = Product::query()
    ->with('translation', 'category')
    ->get()
    ->groupBy('category.name');

Как сортировать товары по алфавиту? Таким образом, результаты будут выглядеть так:

categoryName1:
    a
    b
    c
categoryName2:
    a
    b
    c

Я понимаю, что не могу использовать ->with, но мне нужно использовать соединения. Тем не менее я не могу заставить его работать с тем, что я пробовал:

$products = Product::query()
    ->join('categories', 'categories.id', '=', 'products.category_id')
    ->join('product_translations', 'product_translations.product_id', '=', 'products.id')
    ->orderBy('product_translations.title', 'asc')
    ->groupBy('category.name')
    ->get();

Ответы [ 2 ]

1 голос
/ 31 марта 2020

У вас есть ошибка в вашем запросе. Это должно быть category.name.

$products = Product::query()
    ->join('categories', 'categories.id', '=', 'products.category_id')
    ->join('product_translations', 'product_translations.product_id', '=', 'products.id')
    ->orderBy('product_translations.title', 'asc')
    ->groupBy('categories.name')
    ->get();
0 голосов
/ 31 марта 2020

Я получил желаемый результат просто с помощью sortBy. У меня уже была коллекция результатов. Я использовал orderBy, который, конечно, не будет работать с коллекциями. Я был смущен, потому что думал, что работал с запросом из-за ::query().

$products = Product::query()
    ->with('translation', 'category')
    ->get()
    ->sortBy('translation.title')
    ->groupBy('category.name');
...