【发布时间】:2014-08-07 07:13:06
【问题描述】:
背景
我在“类别”模型中使用了 Gii Crud Generator,我想修改管理表单。
我在“protected/views/Category/admin.php”里面查看,
我发现表格是由一个小部件('zii.widgets.grid.CGridView')呈现的, 并且它使用数据提供者作为它的数据。
我想我可以在 data Provider 中找到一些输入 SQL 查询的地方,但我不明白它是如何工作的。
这些是Model->relations()中的代码,但是我不知道接下来要做什么。
public function relations(){
return array(
'cateLang' => array(self::HAS_MANY, 'CategoryLang', 'cate_id')
);
}
生成数据提供者的位置:
public function search(){
$criteria=new CDbCriteria;
$criteria->compare('id',$this->id);
$criteria->compare('status',$this->status,true);
$criteria->compare('createDate',$this->createDate,true);
$criteria->compare('updateDate',$this->updateDate,true);
$criteria->compare('remark',$this->remark,true);
return new CActiveDataProvider($this->with('cateLang'), array(
'criteria'=>$criteria,
));
}
目标
我想在“protected/views/Category/admin.php”的表中再添加两列,
这将显示该行的法语标题和英语标题。
要在 SQL 中获取数据,它将是:
SELECT
cate.id,
lang1.name as "FrenchTitle",
lang2.name as "EnglishTitle",
cate.updateDate,
cate.createDate,
cate.remark
FROM `category` cate
LEFT JOIN `categorylang` lang1
ON `lang1`.`cate_id` = `cate`.id
AND `lang1`.`lang_id`= 1
LEFT JOIN `categorylang` lang2
ON `lang2`.`cate_id` = `cate`.id
AND `lang2`.`lang_id`= 2
WHERE cate.status = 'live'
如果我可以使用数据提供者,CGridView 参数可能是这样的:
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'category-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'id',
'FrenchTitle',
'EnglishTitle',
'createDate',
'updateDate',
'remark',
array(
'class'=>'CButtonColumn',
),
),
));
【问题讨论】:
-
向我们展示数据提供者的生成位置(通常这是模型中的 search() 方法)
-
好的,谢谢。我已经更新了。