簡體   English   中英

如何在Yii中完成CActiveRecord模型提供的數據?

[英]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小部件並顯示為表格。 這意味着,我必須修改數據才能顯示它。

我看到了這樣做的可能性/地方:

  1. 在模型層上,可能在模型類中。 然后,小部件將獲取修改后的數據並照常進行處理。
  2. 在視圖層上,可能在視圖文件中。 然后,我必須修改從模型中獲得的數據,並將其以某種方式傳遞給小部件。

什么是更好的方法(或者也許有一種更優雅的方法,以及如何實現?

無論如何,這是一個丑陋的解決方案(丑陋,因為使用了公共財產):

模特班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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM