Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何设置空值的关系?_Php_Yii - Fatal编程技术网

Php 如何设置空值的关系?

Php 如何设置空值的关系?,php,yii,Php,Yii,我有两张桌子,即设备和供应。 我在yii php中使用了array\u merge作为两个不同表的并集,以便将它们放置在单个网格中 这两个表中常见的字段都可以正常工作。问题是当我试图显示仅存在于这两个表中的一个表中的字段时。它表示属性“Supply.equipType”未定义,因为只有设备具有equipType关系 在我看来: array( 'name'=>'equipment_type', 'value'=>'$data->equipType->na

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

我在yii php中使用了array\u 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'),

    );
}
有没有办法解决这个问题?有没有办法伪造一段关系或什么的


提前感谢

您不能只使用普通SQL联合吗

如果设备有两个字段(a、b),而供应有两个字段(b、c),则可以这样进行联合:

SELECT a, b, null FROM Equipment
UNION ALL
SELECT null, b, c FROM Supply

这个问题表明,在一个gridview中混合不同的模型类型可能不是一个好主意。如果您有一个没有
equipType
的模型,那么很明显,您不能在gridview中显示此列。那么您会期望什么呢

作为一种(肮脏的)解决方法,您可以将所有缺少的列作为伪属性添加到缺少这些列的模型中:

public $equipType;

只需添加条件以检查equipType是否存在:

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

不过,使用sql合并结果会更好。

我已经输入了我的代码sir@EmilioPort您可以为我提供网格、模型和控制器的完整代码来实现此sql吗?我以前在使用csqldataprovider时遇到过问题,因为我找不到完整的代码。啊,想想看,该提供程序已经在运行了r@leonardys..唯一的问题是我用来在网格中显示字段的关系。。