Yii2中的按字段排序
我遇到了这个问题,但没有用yii仪器找到任何解决方案。有人知道如何解决这个问题吗 最终,我使用了这个糟糕的代码Yii2中的按字段排序,yii2,Yii2,我遇到了这个问题,但没有用yii仪器找到任何解决方案。有人知道如何解决这个问题吗 最终,我使用了这个糟糕的代码 $params = []; foreach ($recipeIds as $i => $recipeId) { $params[':id_'.$i] = $recipeId; } $recipes = Recipes::findBySql( 'SELECT * FROM {{%recipes
$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();
试试看:
$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
和字段(…)
请参见虽然这是一个老问题,但今天我遇到了完全相同的问题,下面是我的解决方案,以便它可以帮助任何面临相同问题的人
解决方案:
- 不要使用
使用$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;
}
请参阅Yii Github问题跟踪程序上的此链接您有哪种问题?$receipeId是否始终是数字?如果您遇到Yii或sql错误,至少可以告诉我们。我们猜猜看好吗?我想要带yii标准的请求,比如$recipes=recipes::find()->where(['id'=>$recipeIds])->orderBy(['id'=>array\u reverse($recipeIds)])->limit($this->count)->all();orderBy()不支持AFAIK,字段。但是你可以在得到菜谱后用php来做。谢谢,非常有用的知识new\yii\db\Expression(“..”)