我遇到了这个问题,并没有找到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();
如何解决:: find()?
UPD:应该像
$recipes = Recipes::find()
->where(['id' => $recipeIds])
->orderBy(['id' => array_reverse($recipeIds)])
->limit($this->count)
->all();
答案 0 :(得分:21)
试试:
$recipes = Recipes::find()
->where(['in', 'id', $recipeIds])
->orderBy([new \yii\db\Expression('FIELD (id, ' . implode(',', array_reverse(array_keys($params))) . ')')])
->limit($this->count)
->all();
使用orderBy
与FIELD (...)
一起使用时请参阅https://github.com/yiisoft/yii2/issues/553
答案 1 :(得分:0)
虽然这是一个老问题,但今天我遇到了完全相同的问题,下面是我的解决方案,因此它可以帮助任何面临相同问题的人。
解决方案:
$this->hasMany
,而是使用ActiveQuery
$multiple
来指示此查询将返回一个结果数组。leftJoin
方法,并在其中定义连接表关系。示例:
public function getValues()
{
$query = Value::find()
->leftJoin(ItemHasValue::tableName(), ItemHasValue::tableName() . '. value_id = ' . Value::tableName() . '.id' )
->where([
// define all ur conditions here
])
$query->multiple = true;
return $query;
}
P.S 请参阅 Yii Github 问题跟踪器 https://github.com/yiisoft/yii2/issues/17166
上的此链接