Yii按关系列HAS_MANY排序

时间:2016-03-06 19:29:10

标签: php mysql yii

商业模式:

一张发票可以有多种状态(草稿,进行中,发送,删除)。

在CGridView中,我想要显示最后状态的发票

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'carriage-grid',
    'dataProvider'=>$model->search(array(
        'completed'=>true,
        'pagination'=>true,
    )),
    'filter'=>$model,
    'columns'=> [
        array(
        'name'=>'InvoiceName',
        'type'=>'raw',
        'value'=>$model->InvoiceName,
    ),
        array(
        'name' => 'InvoiceStatus',
        'value' => $model->InvoiceStatus->Name,
    ),
    ]
)); ?>

在发票模型中,我声明了关系:

'status'=>array(self::HAS_MANY, 'InvoiceStatus', 'invoice_id'),

在CGridView中显示的数据是正确的,但是当我尝试按InvoiceStatus->name

排序时

我得到了什么:

(BY ASC)
  1. 发票名称+第一个状态
  2. 发票名称2 +第一个状态
  3. (BY DESC)

    1. 发票名称+上次状态
    2. 发票名称2 +上次状态
    3. 我期望获得:

      (BY ASC)

      1. 发票名称+状态
      2. 发票名称2 + B状态
      3. (BY DESC)

        1. 发票名称2 + B状态
        2. 发票名称1 + A状态
        3. 这意味着,我想要订购所有记录不仅状态,并始终显示最后状态

1 个答案:

答案 0 :(得分:1)

我认为您必须实施"自定义排序"去做这个。有关详细信息,请参阅http://www.yiiframework.com/wiki/590/sort-and-filter-a-custom-or-composite-cgridview-column-that-may-even-contain-data-from-different-tables/