我正在使用Yii 1.1.16应用程序并遇到以下困难:
基于FooModel
的模型CActiveRecord
。它背后是一个数据库表bar_table
,数据结构非常不方便:
id: integer
some_column: string
data: string <- JSON
这意味着,我几乎将整个数据作为JSON字符串。 (是的,这很疯狂,但现在我接受了它。)
在视图中,数据应传递给CGridView
小部件并显示为表格。这意味着,我必须修改数据,以便显示它。
我看到了这样做的可能性/地方:
什么是更好的方法(或者可能有更优雅的方法以及如何实施它?
答案 0 :(得分:0)
这是一个丑陋的解决方案(丑陋,因为使用了公共财产),无论如何它都有效:
模型类Foo
class Foo extends CActiveRecord {
...
public $buz;
...
public function findAll($condition, $params=array()) {
$resultData = parent::findAll($condition='', $params);
foreach ($resultData as $key => $insuranceExternal) {
$data = json_decode($insuranceExternal->getAttribute('data'), true);
$insuranceExternal->setAttribute('myAdditionalProperty', $data['baz']['buz']);
}
return $resultData;
}
}
查看强>
$dataProvider = $model->search();
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'my-grid',
'dataProvider'=>$dataProvider,
'filter'=>$model,
'columns'=>array(
...
'myAdditionalProperty',
),
));
答案 1 :(得分:0)
你可以使用&#34; afterFind&#34;处理json数据的方法/事件
class Foo extends CActiveRecord {
protected function afterFind()
{
$this->data = json_decode($this->data);
}