我在视图表中为MYSQL中的产品做了一些计算,所以我列出了这些id作为产品参考ID。
$referenceIds = viewTable::orderBy('score', 'DESC')->lists('product_id');
我想从这些参考ID中获取产品。
$products = Product::whereIn('id', $rederenceIds);
产品内容正确,但订单错误,如何通过引用ID加载产品订单,我知道我可以使用ORDER BY FIELD(id,' . $fields . ')
在MySQL中完成,但我想找出Laravel方式,并且希望不要使用ORDER BY FIELD
命令,因为它似乎浪费了很多数据库效率。
答案 0 :(得分: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();
答案 1 :(得分:0)
不确定我是否完全理解这一点,但如果您想订购产品,则应使用
$referenceIds = viewTable::lists('product_id');
$ordered_products = Product::whereIn('id', $rederenceIds)->orderBy('id', 'DESC')->get();