0

我有两张桌子,即设备供应。

我在 yii php 中使用了array_merge作为两个不同表的联合,以便将它们显示在一个网格中。

一切都适用于两个表共有的字段。问题是当我尝试显示仅存在于这两个表之一中的字段时。它说属性“Supply.equipType”未定义“因为只有设备具有equipType关系。

在我的网格视图中:

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

你不能只使用普通的 SQL 联合吗?

如果 Equipment 有 2 个字段 (a, b) 而 Supply 有 2 个字段 (b, c),您可以像这样进行联合:

SELECT a, b, null FROM Equipment
UNION ALL
SELECT null, b, c FROM Supply
于 2013-09-09T01:58:58.453 回答
0

这个问题表明,在一个网格视图中混合不同的模型类型可能不是一个好主意。如果您的模型没有,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 回答