加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Yii2中的按字段排序

发布时间:2020-12-13 22:19:26 所属栏目:PHP教程 来源:网络整理
导读:我遇到了这个问题,没有找到yii仪器的任何解决方案.有人知道如何解决这个问题吗? 最终,我使用了这个糟糕的代码 $params = [];foreach ($recipeIds as $i = $recipeId) { $params[':id_'.$i] = $recipeId;}$recipes = Recipes::findBySql( 'SELECT * FROM {{%
我遇到了这个问题,没有找到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 yiidbExpression('FIELD (id,' . implode(',array_reverse(array_keys($params))) . ')')])
    ->limit($this->count)
    ->all();

有关使用orderBy和FIELD(…)的信息,请参阅https://github.com/yiisoft/yii2/issues/553

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读