@kirill-93

Как отсортировать выборку laravel по массиву?

Есть массив идентификаторов
$ids = [1, 5, 17, 23];
Выбираю по ним продукты
$products = Product::whereIn('id', $ids)->get();
Как теперь отсортировать выборку, чтобы первым шел продукт с id = 1, вторым id = 5, третьим id = 17 и тп?

UPD:
Решение
->orderBy(\DB::raw("FIELD(id, " . implode(',', $entityIds) . ")"))
  • Вопрос задан
  • 759 просмотров
Решения вопроса 1
DJZT
@DJZT
Laravel - code for you
$ids = [1, 5, 17, 23];
$products = Product::whereIn('id', $ids)
    ->orderBy(\DB::raw("ORDER BY FIELD(id".implode(',',$ids).")"))
    ->get();


Я так делал. Из этой статьи oooportal.ru/?cat=article&id=1227
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
65536
@65536
всегда волновал этот вопрос, но так и не нашел решения. кручу цикл (вроде ничего страшного в связи с этим еще не произошло)

class X
{
    public static function getRowsByField($rows, $field)
    {
        $output = [];
        foreach ($rows as $row) {
            $output[$row[$field]] = $row;
        }

        return $output;
    }
}


$ids = [1, 5, 17, 23];

$products = Product::whereIn('id', $ids)->get();

$productsById = X::getRowsByField($products, 'id');

foreach ($ids as $id) {
     ....$productsById[$id]...
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы