我遇到了这个问题,没有找到yii仪器的任何解决方案.有人知道如何解决这个问题吗?
最终,我使用了这个糟糕的代码
$params = [];
foreach ($recipeIds as $i => $recipeId) {
$params[':id_'.$i] = $recipeId;
}
$recipes = Recipes::findBySql(
'SELECT
*
FROM
{{%recipes}}
WHERE
`id` IN ('.implode(', ',array_keys($params)).')
ORDER BY
FIELD (id, '.implode(',', array_reverse(array_keys($params))).')
LIMIT
:limit',
$params + [':limit' => $this->count]
)
->all();
Run Code Online (Sandbox Code Playgroud)
如何解决:: find()?
UPD:应该是这样的
$recipes = Recipes::find()
->where(['id' => $recipeIds])
->orderBy(['id' => array_reverse($recipeIds)])
->limit($this->count)
->all();
Run Code Online (Sandbox Code Playgroud)
vit*_*_74 22
试试看:
$recipes = Recipes::find()
->where(['in', 'id', $recipeIds])
->orderBy([new \yii\db\Expression('FIELD (id, ' . implode(',', array_reverse(array_keys($params))) . ')')])
->limit($this->count)
->all();
Run Code Online (Sandbox Code Playgroud)
使用orderBy时FIELD (...)请参阅https://github.com/yiisoft/yii2/issues/553
| 归档时间: |
|
| 查看次数: |
9322 次 |
| 最近记录: |