我有2个表,即设备和供应。
我在yii php中使用 array_merge 作为两个不同表的联合,以便将它们放在单个网格中。
使用两个表中常见的字段,一切正常。问题是当我尝试显示仅存在于这两个表之一中的字段时。它说属性“Supply.equipType”未定义“因为只有设备具有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'),
);
}
关于如何解决这个问题的任何想法?有没有办法伪造关系或什么?
提前致谢
答案 0 :(得分:0)
你不能只使用普通的SQL联盟吗?
如果Equipment有2个字段(a,b)而Supply有2个字段(b,c),你可以这样做:
SELECT a, b, null FROM Equipment
UNION ALL
SELECT null, b, c FROM Supply
答案 1 :(得分:0)
这个问题表明,在一个gridview中混合不同的模型类型可能不是一个好主意。如果您的模型没有equipType
,那么很明显,您无法在gridview中显示此列。那么你会期待什么?
作为(脏)变通方法,您可以将所有缺失的列作为伪属性添加到缺少它们的模型中:
public $equipType;
答案 2 :(得分:0)
只需添加条件以检查equipType是否存在:
'value'=>'isset($data->equipType) ? $data->equipType->name : ""'
使用sql合并结果会更好。