[英]How to complete data provided by a CActiveRecord model in Yii?
我正在處理Yii 1.1.16應用程序,並且遇到以下困難:
有一個基於CActiveRecord
的模型FooModel
。 它的后面是數據庫表bar_table
,它的數據結構非常不方便:
id: integer
some_column: string
data: string <- JSON
這意味着,我幾乎將所有數據作為JSON字符串獲取。 (是的,這很瘋狂,但是現在我接受了它。)
在視圖中,數據應傳遞到CGridView
小部件並顯示為表格。 這意味着,我必須修改數據才能顯示它。
我看到了這樣做的可能性/地方:
什么是更好的方法(或者也許有一種更優雅的方法,以及如何實現?
無論如何,這是一個丑陋的解決方案(丑陋,因為使用了公共財產):
模特班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',
),
));
您可以使用“ afterFind”方法/事件來處理您的json數據
class Foo extends CActiveRecord {
protected function afterFind()
{
$this->data = json_decode($this->data);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.