问:如何为gridview创建过滤器?
status:customer name = first_name。姓氏
这是我的网格视图
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'customer-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
array(
'header'=>'Customer Name',
'name'=>'$data->first_name',
'value'=>'$data->first_name.\' \'.$data->last_name',
),
'company_name',
'country',
'state',
'city',
'address1',
'phone1',
'email',
array('name' => 'company_id',
'value'=>'$data->companies->name',
'filter'=>CHtml::listData($records, 'id', 'name'),
),
array(
'class'=>'CButtonColumn',
),
),
)); ?>
答案 0 :(得分:12)
在模型中创建一个var
class Customer extends CActiveRecord
{
public $customer_name;
public function search()
{
$criteria->compare('CONCAT(first_name, \' \', last_name)',$this->customer_name,true);
}
}
在视图
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'customer-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
array(
'name'=>'customer_name',
'value'=>'ucwords($data->first_name.\' \'.$data->last_name)',
),
'company_name',
'country',
'state',
'city',
'address1',
'phone1',
'email',
array(
'class'=>'CButtonColumn',
),
),
)); ?>
并且不要忘记在模型的rules()方法中将新属性声明为'safe',否则您的输入将不被视为
public function rules()
{
return array(
/* ... */
array('customer_name', 'safe', 'on'=>'search'),
);
}
答案 1 :(得分:4)
首先改变:
'name'=>'$data->first_name',
为:
'name'=>'first_name',
在模型的search
方法中,您必须添加LIKE
条件:
$model->addSearchCondition( 'CONCAT( first_name, " ", last_name )', $this->first_name );