这是对这个问题的跟进:
Display related has_many data inside once cell in Yii TbExtendedGridView
我让那个单元格工作,但现在我不知道如何使它可以排序和过滤(过滤字段被隐藏)。
查看:
$this->widget('bootstrap.widgets.TbExtendedGridView', array(
'id'=>'user-grid',
'dataProvider' => $model->search(),
'filter' => $model,
'columns' => array(
'user_name',
'favorite_color',
array(
'value'=>'$data->getAllDates()',
),
),
));
一个用户可以拥有许多可以是单日期或日期范围的日期,因此我有getAllDates函数可以获取所有内容并将所有内容放在字符串中,以便它们可以在单个单元格内为该用户表示。
型号:
public function relations()
{
return array(
'listofdates' => array(self::HAS_MANY, 'Dates', 'user_id'),
);
}
public function getAllDates()
{
$data = '';
foreach ($this->listofdates as $date) {
$data .= $date->start_date.'-'.$date->end_date;
}
return $data;
}
我不知道如何启用过滤和搜索日期列。它甚至没有标题或过滤字段。 我可以通过添加' name'来为该列启用过滤字段=> '无论什么',但当然数据库中没有单一列的数据,所以我得到MYSQL错误。 我猜我需要创建另一个自定义函数进行过滤,但我不知道从哪里开始。
答案 0 :(得分:0)
你可以创建一个额外的字段来过滤和排序$ datesFilter并过滤如下:
模特中的:
public $datesFilter;
public function rules()
{
array(
array('datesFilter', 'safe', 'on'=>'search')
);
}
public function search()
{
$criteria=new CDbCriteria;
...
// filtering
if ($this->datesFilter!==null)
$criteria->addCondition('YOUR QUERY CONDITION');
...
// sorting
$sort = new CSort;
$sort->attributes =
array(
...
'datesFilter'=>=>array('asc'=>'YOUR SORT ASC', 'desc'=>'YOUR SORT DESC'),
);
}
在视图中:
$this->widget('bootstrap.widgets.TbExtendedGridView', array(
'id'=>'user-grid',
'dataProvider' => $model->search(),
'filter' => $model,
'columns' => array(
'user_name',
'favorite_color',
array(
'value'=>'$data->getAllDates()',
'name'=>'datesFilter',
),
),
));