我有下表:
CREATE TABLE "place" (
"id" int8 NOT NULL DEFAULT nextval('place_id_seq'::regclass),
"name" varchar(128) NOT NULL,
"parent" int8,
"description" varchar(100)
)
WITH (OIDS=FALSE);
(这是PostgreSQL,但这不应该与此相关)
我通过giix创建了CRUD并改变了一些符合我需求的关系。所以我最终得到了:
public function relations() {
return array(
'parent0' => array(self::BELONGS_TO, 'Places', 'parent'),
'places' => array(self::HAS_MANY, 'Places', 'parent'),
);
}
这里的目标是一个地方可以属于另一个地方并且有多个孩子的地方。
我的问题是我需要更改管理操作以匹配以下网格:
由检查员操纵的打印以反映所需的行为
所以我的问题是获取所有子对象的列表并将其显示为链接列表。我尝试更改相应的admin.php视图文件:
$this->widget('zii.widgets.grid.CGridView', array(
'id' => 'places-grid',
'dataProvider' => new CActiveDataProvider('Places', array('id'=>$model->places)),
'filter' => $model,
'columns' => array(
array(
'name'=>'parent',
'value'=>'GxHtml::valueEx($data->parent0)',
'filter'=>GxHtml::listDataEx(Places::model()->findAllAttributes(null, true)),
),
'name',
'places',
array(
'class' => 'CButtonColumn',
),
),
));
但正如预期的那样,这是一个错误:
htmlspecialchars()期望参数1为字符串,给定数组为
此外,我不知道这甚至适用于内置的高级搜索。
有人可以在这里指出我正确的方向吗?
答案 0 :(得分:1)
经过多次搜索,我找到了解决问题的方法。不确定它是否是最好的方式,但效果很好:
$this->widget('zii.widgets.grid.CGridView', array(
'id' => 'places-grid',
'dataProvider' => new CActiveDataProvider('Places', array('id'=>$model->places)),
'filter' => $model,
'columns' => array(
array(
'name'=>'parent',
'value'=>'GxHtml::valueEx($data->parent0)',
'filter'=>GxHtml::listDataEx(Places::model()->findAllAttributes(null, true)),
),
'name',
array(
'header'=>'Children',
'type'=>'html',
'value'=> function($data) {
$placesLinks = array();
foreach ($data->places as $place) {
$placesLinks[] = GxHtml::link(GxHtml::encode(GxHtml::valueEx($place, 'name')), array('places/view', 'id' => GxActiveRecord::extractPkValue($place, true)));
}
return implode(', ', $placesLinks);
}
),
array(
'class' => 'CButtonColumn',
),
),
));
这使用Giix。如果您不使用它,那么您将不得不相应地更改链接生成。
干杯