0

EquipmentSupplyという 2 つのテーブルがあります。

私はyii php でarray_mergeを使用して、2 つの異なるテーブルを単一のグリッドで表示する目的でそれらの結合として機能させました。

2 つのテーブルに共通するフィールドでは、すべてが正常に機能します。問題は、これら 2 つのテーブルのいずれかにのみ存在するフィールドを表示しようとしたときです。機器のみがequipType関係を持っているため、プロパティ「Supply.equipType」は定義されていません」と表示されます。

私のgridViewで:

array(
     'name'=>'equipment_type',
     'value'=>'$data->equipType->name',  
     ),

マージを行ったコントローラーで:

    $prov1 = new CActiveDataProvider('BaseEiEquipItem', array(
            'criteria' => array(
                    'condition' => 'id>0'
                    )));

    $prov2 = new CActiveDataProvider('BaseSiReceivedItem', array(
            'criteria' => array(
                    'condition' => 'id>0'
                    )));



    $records=array_merge($prov1->data , $prov2->data);

    $provAll = new CArrayDataProvider($records,
            array(
                    'sort' => array( //optional and sortring
                            'keyField'=>false,
                            'attributes' => array(
                                    'id', 'description',),
                    ),
                    'pagination' => array('pageSize' => 10) //optional add a pagination
            )
    );

    $this->render('create',array(
            'model'=>$model,
            'searchModel'=>$searchModel,
            'modelGrid'=>$modelGrid,
            'provAll' => $provAll,
    ));

私の機器モデルで:

public function relations() {
    // NOTE: you may need to adjust the relation name and the related
    // class name for the relations automatically generated below.      
    return array(
    'equipType' => array(self::BELONGS_TO, 'BaseRefEquipmentType', 'equipment_type'),

    );
}

これを解決する方法について何か考えはありますか?関係か何かを偽造する方法はありますか?

前もって感謝します

4

3 に答える 3

0

この問題は、1 つのグリッドビューに異なるモデル タイプを混在させるのはおそらく良い考えではないことを示しています。ないモデルがある場合equipType、この列をグリッドビューに表示できないことは明らかです。それで、あなたは何を期待しますか?

(汚い) 回避策として、不足しているすべての列を疑似属性として、それらが不足しているモデルに追加できます。

public $equipType;
于 2013-09-09T08:32:59.443 に答える
0

条件を追加して、equipType があるかどうかを確認します。

'value'=>'isset($data->equipType) ? $data->equipType->name : ""'

ただし、SQL を使用して結果をマージする方がよいでしょう。

于 2013-09-09T12:09:18.680 に答える