web-dev-qa-db-ja.com

Laravel:どこで注文するか

SphinxSearchを使用して一部のコンテンツをクエリし、MySQLでクエリするオブジェクトのIDを取得しています。私のIDの配列は、Sphinxが与えるランクに応じてソートされます。したがって、MySQLを次のように作成します。

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

私はできることを知っています:

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

しかし、注文したものを手に入れることができません。

Laravelで適切な方法でそれを行うにはどうすればよいですか?

21
MPikkle

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();
62
MPikkle

この問題も発生しましたが、対象の配列要素は文字列でした。この場合 ...

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

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

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