Фильтрация связанных полей cgridview

У меня есть проблема, которую я решил для всех, кроме одного из фильтров cgridview, который является смежным полем.

Я использую решение, предоставленное Seenivasan, но статус соответствующего поля не добавляется в строку.

Вот cgridview:-

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'tbl-orders-grid',
    'dataProvider'=>$dataProvider,
    'afterAjaxUpdate'=>"function() {
                                                jQuery('#Orders_date_first').datepicker(jQuery.extend({showMonthAfterYear:false}, jQuery.datepicker.regional['id'], {'showAnim':'fold','dateFormat':'yy-mm-dd','changeMonth':'true','changeYear':'true','constrainInput':'false'}));
jQuery('#Orders_date_last').datepicker(jQuery.extend({showMonthAfterYear:false}, jQuery.datepicker.regional['id'], {'showAnim':'fold','dateFormat':'yy-mm-dd','changeMonth':'true','changeYear':'true','constrainInput':'false'}));
                                                }",

'filter'=>$model,
'columns'=>array(
    array(
        'name'=>'id',
        'type'=>'raw',
        'value'=>'str_pad($data->id,8-strlen($data->id),"0",STR_PAD_LEFT)',
        'htmlOptions'=>array('style' => 'text-align: right;width: 60px;')
    ),
    array(
            'name'=>'date_order_placed',
            'filter'=>$dateisOn,
            'value'=>'date("d-m-Y",strtotime($data->date_order_placed))',
            ), 
    array(
      'name'=>'status',
      'type'=>'raw',
      //'htmlOptions'=>array('id' => 'order_status_search'),
      'value'=>'CHtml::value($data,"status.orders_status_name")',
      'filter'=>CHtml::listData(OrderStatus::model()->findAll(
                  array(
                   'select'=>array('orders_status_name'),
                   'distinct'=>true

                  )),"orders_status_name","orders_status_name")//this is the focus of your code

   ),

    array(
        'class'=>'EButtonColumnWithClearFilters',
         'clearVisible'=>true,
        'template'=>'{view}{email}',
        'buttons'=>array
        (
            'email' => array
            (
                'label'=>'Reprint invoice and email to yourself',
                'imageUrl'=>Yii::app()->request->baseUrl.'/images/email.png',
                'url'=>'Yii::app()->createUrl("orders/ureprint", array("id"=>$data->id))',


            ),

        ),
    ),
),
)); ?>

вот php и js, которые добавляют текущие значения фильтра к URL.

echo CHtml::button('List Orders',array('id'=>'listelement'));

Yii::app()->clientScript->registerSCript('test','
$("body").on("click","#listelement",function(){
        var str="&";
    $.each($("#tbl-orders-grid input").serializeArray(),function(i,j){
            str=str+j.name+"="+j.value+"&";

            });


            window.location="'.CHtml::normalizeUrl(array('orders/index')).'"+str;
    });

');

Другие фильтры, даты и идентификатор работают отлично. Они добавляются в URL выше. Статус нет.

1 ответ

1- вам нужно определить новые фильтры в вашей модели serach(), например, например

 $criteria->compare('Restaurant.Name',$this->Name,true);  

Ресторан - это ваш ключ отношения, имя: значение из другой таблицы, связанной с этим fk

2 - вы должны добавить значение столбца gridview, например:

Посмотреть:

array(
          'name' => 'Restaurant.Name',
          'header' => 'Username',
          'filter' => CHtml::activeTextField($model, 'name'),
          'value' => '$data->Restaurant->Name',

Эта ссылка поможет вам yii фильтр CGridView с отношениями

Другие вопросы по тегам