我对此进行了大量搜索,到目前为止还没有得到答案。这是问题所在:
我正在创建CDbCriteria对象以获取正确的数据:
$criteria = new CDbCriteria;
$criteria->compare('id_post', $arrayContents);
其中$arrayContents
是一个由以下元素组成的数组:
Array ( [0] => 10 [1] => 16 [2] => 14 [3] => 15 )
这些是我想要使用dataProvider呈现的id_posts
,但仅限于特定顺序。此外,我以这种方式创建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
。
答案 0 :(得分:1)
CActiveDataProvider不会做你需要的。它提供的顺序只是普通的SQL顺序,它必须作为ASC或DESC列的组合进行计算。
您想要的订单看起来像是任意的ID顺序。我猜你的模型中没有像'position'这样的其他列,所以你必须自己对数据进行排序。
我没有尝试,但在API之后,您可以使用 getData() / setData()方法来提取数据,对其进行排序并进行设置回到您的提供商。