Laravel: заказ по где в

Я использую SphinxSearch для запроса некоторого содержимого и получения идентификаторов моих объектов, которые я хочу запросить с MySQL. Массив моих идентификаторов сортируется в зависимости от их ранга, который дает Сфинкс.
Таким образом, я хотел бы сделать MySQL примерно так:

SELECT * FROM table WHERE id IN (1,17,2)
ORDER BY FIELD(id,1,17,2)

Я знаю, что могу сделать:

Table::whereIn('id', $ids)->get();

Но я не могу получить заказ, который у меня был.

Как я могу сделать это надлежащим образом с Laravel?

14

Решение

Используя решение, найденное на http://laravelsnippets.com/snippets/get-all-items-at-once-ordered-by-the-current-order-of-ids-in-the-where-in-clause-using-eloquent

$ids = array(1,17,2);

$ids_ordered = implode(',', $ids);

$items = static::whereIn('id', $ids)
->orderByRaw(DB::raw("FIELD(id, $ids_ordered)"))
->get();
50

Другие решения

Я тоже получил эту проблему, но мои целевые элементы массива были строками. в этом случае …

$strings = array('xxx','yyy','zzz');

$imploded_strings = implode("','", $strings);

$items = static::whereIn('some_column', $strings)
->orderByRaw(DB::raw("FIELD(some_column, '$imploded_strings')"))
->get();
0

По вопросам рекламы [email protected]