我在一个视图表中为MySQL中的产品做了一些计算,所以我列出了这些ID作为产品引用ID。

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

我想从参考ID中获取产品。
$products = Product::whereIn('id', $rederenceIds);

产品内容是正确的,但顺序是错误的,如何通过引用id加载产品订单,我知道我可以在MySQL中使用ORDER BY FIELD(id,' . $fields . ')来实现,但我想找到一种更有效的方法,希望不要使用ORDER BY FIELD命令,因为它似乎浪费了大量的数据库效率。

最佳答案

您将不得不注入一些原始的SQL,但这不是一个噩梦:

$referenceIds = viewTable::orderBy('score', 'DESC')->lists('product_id');
$referenceIdsStr = implode(',', $referenceIds);
$products = Product::whereIn('id', $rederenceIds)->orderByRaw(DB::raw("FIELD(product_id, $referenceIdsStr)"))->get()->all();

10-06 05:15