mysql
在使用where in
查询时,会将查询结果自动根据主键ASC
排序,在某些特定场景下,这种机制就会造成问题
解决办法
主要使用$symbolStr = implode(',',$attrSymbolPath);
和->orderByRaw(DB::raw("FIELD(symbol,$symbolStr)"))
完整代码示例
public function getAttrValueName($attrSymbolPath)
{
//将$attrSymbolPath变量的值转化为一个字符串
$symbolStr = implode(',',$attrSymbolPath);
try {
$data = $this->attrValue::query()
->whereIn('symbol', $attrSymbolPath)
//灵魂就在这里
->orderByRaw(DB::raw("FIELD(symbol,$symbolStr)"))
->get(['attr_value'])->toArray();
return $data;
} catch (\Exception $e) {
//预警处理
$this->warning->throwMsg('获取SKU属性值名称', $e->getMessage());
//返回处理
$this->dataBase->errorMsg();
}
}
网友评论