Yii2中的按字段排序

Yii2中的按字段排序,yii2,Yii2,我遇到了这个问题,但没有用yii仪器找到任何解决方案。有人知道如何解决这个问题吗 最终,我使用了这个糟糕的代码 $params = []; foreach ($recipeIds as $i => $recipeId) { $params[':id_'.$i] = $recipeId; } $recipes = Recipes::findBySql( 'SELECT * FROM {{%recipes

我遇到了这个问题,但没有用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();
试试看:

$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(“..”)