【问题标题】:Yii dataProvider the data order given by an arrayYii dataProvider 数组给定的数据顺序
【发布时间】:2013-05-20 14:34:56
【问题描述】:

我已经对此进行了很多搜索,但到目前为止还没有得到答案。问题来了:
我正在创建 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

【问题讨论】:

  • 好吧,这实际上不是 Yii 问题,而是 db,这里是关于在子句 stackoverflow.com/questions/396748/… 中排序的问题,但是我不知道如何将它应用于 Yii 数据提供者。
  • 感谢您的回答。这给了我一些新的想法,但到目前为止都没有奏效。
  • 在表 priority 中添加另一个字段。设置优先级以便根据您的选择显示数据。简单的!也许不是您的答案的解决方案,而是一个随机的想法。这或许可以解决您的问题。

标签: php yii dataprovider


【解决方案1】:

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

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

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

【讨论】:

  • 成功了!非常感谢你。自从我发布它以来,我没有太多时间,但毕竟我花了一段时间才了解那些 getData() 和 setData() 是如何工作的。对于那些可能有兴趣实现这就是我的做法的人:
  • $arrayContents2 = $dataProviderPosts->getData(); $arrayContents3 = $dataProviderPosts->getData(); $arrayContents4 = $arrayPhraseInContents; sort($arrayContents4); $number = count($arrayContents); for($i=0;$i<$number;$i++) { $key = array_search($arrayPhraseInContents4[$i], $arrayPhraseInContents); $arrayPhraseInContents2[$key]=$arrayPhraseInContents3[$i]; } $dataProviderPosts->setData($arrayContents2);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多