3

我已经对此进行了很多搜索,但到目前为止还没有得到答案。这是问题所在:
我正在创建 CDbCriteria 对象以获取正确的数据:

$criteria = new CDbCriteria;
$criteria->compare('id_post', $arrayContents);

其中$arrayContents是一个由以下元素组成的数组:

Array ( [0] => 10 [1] => 16 [2] => 14 [3] => 15 )

这些是id_posts我想使用 dataProvider 呈现的,但仅限于特定顺序。此外,我以这种方式创建 dataProvider:

$dataProviderPosts = new CActiveDataProvider('Posts',array(
            'criteria'   => $criteria,
            'pagination'=>array(
                    'pageSize'=>20,
            ),
    ));

显示的顺序id_posts是:10、14、15、16。不是我想要的。
我也尝试过像这样创建 dataProvider :

$dataProviderPosts = new CActiveDataProvider('Posts',array(
            'criteria'=>$criteria,
            'sort'=>array(
                    'defaultOrder'=>array('id_post'=>$arrayContents),
            ),
            'pagination'=>array(
                    'pageSize'=>20,
            ),
    ));

但它只是按以下顺序显示它:16、15、14、10,所以只是向后,所以不是我想要的,因为我想按顺序显示它:10、16、14、15,就像$arrayContents.

4

1 回答 1

1

CActiveDataProvider 不会做你需要的。它提供的顺序只是普通的 SQL 顺序,它必须作为 ASC 或 DESC 列的组合来计算。

您想要的顺序看起来像任意的 id 顺序。我猜你的模型中没有像“位置”这样的其他列,所以你必须自己对数据进行排序。

我没有尝试,但是在 API 之后,您可以使用getData() / setData()方法来提取数据,对其进行排序并将其设置回您的提供程序。

于 2013-05-20T16:23:43.890 回答