15

MYSQL の製品のビュー テーブルで計算を行ったので、これらの ID を製品参照 ID としてリストします。

$referenceIds = viewTable::orderBy('score', 'DESC')->lists('product_id');

そして、それらの参照 ID から製品を取得したいと考えています。

$products = Product::whereIn('id', $rederenceIds);

商品内容は正しいが順番が間違っている、参照IDで商品注文をロードする方法、MySQLでは を使えばできるのはわかっているがORDER BY FIELD(id,' . $fields . ')、Laravelのやり方を知りたい、ORDER BY FIELDコマンドが無駄だから使わないでほしいデータベースの効率が大幅に向上します。

4

3 に答える 3

0

キーが主キーの場合 (この質問では ... だと思います)、これを試すことができます:

$products = Product::whereIn('id', $rederenceIds)->get();
$products = array_replace(array_flip($rederenceIds), $products->getDictionary());

結果はCollectionではなくArrayです。

効率の問題があるかどうかはわかりませんが、フィールドごとの順序には別の問題があります。たとえば、フィールドによる並べ替えは sqlite ではサポートされていないため、インメモリ データベースでのテストでは機能しません。

于 2015-09-19T06:57:33.290 に答える
0

これを完全に理解しているかどうかはわかりませんが、注文した製品が必要な場合は、

$referenceIds = viewTable::lists('product_id');

$ordered_products = Product::whereIn('id', $rederenceIds)->orderBy('id', 'DESC')->get();
于 2013-10-24T08:30:33.117 に答える