如何在Laravel的各个领域订购

Cha*_*han 14 mysql laravel

我在视图表中为MYSQL中的产品做了一些计算,所以我列出了这些id作为产品参考ID.

$referenceIds = viewTable::orderBy('score', 'DESC')->lists('product_id');
Run Code Online (Sandbox Code Playgroud)

我想从这些参考ID中获取产品.

$products = Product::whereIn('id', $rederenceIds);
Run Code Online (Sandbox Code Playgroud)

产品内容是正确的,但顺序错误,如何通过引用ID加载产品订单,我知道我可以在MySQL中使用ORDER BY FIELD(id,' . $fields . '),但我想找出Laravel方式,并希望不要使用ORDER BY FIELD命令,因为它似乎浪费提高数据库效率.

小智 11

你将不得不注入一些原始的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();
Run Code Online (Sandbox Code Playgroud)

  • 如果你已经在使用`orderByRaw`,那么就不需要使用`DB :: raw`. (4认同)

Gla*_*elp 0

不确定我是否完全理解这一点,但如果您想要订购产品,您应该使用

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

$ordered_products = Product::whereIn('id', $rederenceIds)->orderBy('id', 'DESC')->get();
Run Code Online (Sandbox Code Playgroud)