YII - 使用数组对dataProvider进行排序

时间:2013-10-26 13:52:22

标签: php arrays sorting yii

我有一个这样的数组:

Array
(
    [54995] => Array
        (
            [id] => 54995
            [create_time] => 2012-02-02 20:09:00
        )
    [57349] => Array
        (
            [id] => 57349
            [create_time] => 2012-02-09 23:26:00
        )
    [63565] => Array
        (
            [id] => 63565
            [create_time] => 2013-10-26 15:55:30
        )
    [63566] => Array
        (
            [id] => 63566
            [create_time] => 2013-10-26 15:56:32
        )
)

和按ID排序的dataProvider。

我将使用此数组的create_time对dataProvider进行排序。

数组ID与dataProvider中的posts id相等。

我可以这样做吗?

修改

我有 链接 标记 模型。我使用dataProvider进行链接,但创建存储在标记表中的时间。

标记字段:

  • id
  • title
  • link_id
  • CREATE_TIME

链接字段:

  • ID
  • 标题

链接dataProvider生成器:

$pCriteria = new CDbCriteria();
$pCriteria->condition = 'status=:p1';
$pCriteria->params = array(':p1' => Lookup::STATUS_PUBLISHED_ALL);
$pCriteria->addInCondition('id', $pishnahadIds);
$pLinks = Link::model()->findAll($pCriteria);

由于某些原因,我没有任何关系。

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,您希望返回的数据按create_time而不是id排序? 为此,只需使用CDbCriteria order property

$pCriteria = new CDbCriteria();
// ...
$pCriteria->with = array('tag'); // Only works with properly setup relationships, otherwise use $pCriteria->join = '...';
$pCriteria->order = 'tag.create_time ASC'; // or DESC, whatever you need
$pLinks = Link::model()->findAll($pCriteria);

要修复关系信息,您需要指定每个模型中的关系。看看this。希望能给你一些指示。简而言之,每个模型都有一个relations()函数,它返回一个数组,描述它与其他模型之间的关系。

修改

显然我的做法是错误的......你能否澄清一下你的问题的描述,chalist?现在我想您希望Link::model()->findAll()操作的结果按create_time排序。顶部的原始数组也来自哪里?

修改2

好的,所以链接和标签共享1:1的关系,你想要链接输出按相应的标签的创建时间排序?您描述的阵列是否必须手动创建?你是否在建议的链接排序之外需要它?