如何在foreignkey表IN Yii中存在空值时在CGridView中显示空值

时间:2016-01-18 13:14:29

标签: php yii

如果我使用INNER Join,则以下代码效果很好,但对于LEFT JOIN,它显示“试图获取非对象的属性”。我需要在这里使用Left Join,因为outlet_id不是必填字段,它可能为null。如果设置了outlet_id,那么我想显示插座名称,否则只是空白。

我的模特:

public function relations()
            {
                    'outlet' => array(self::BELONGS_TO, 'Outlets',         'outlet_id','joinType'=>'LEFT JOIN','select'=>'id,name'),
            }
    //Search Function
    public function search()
        {
            // @todo Please modify the following code to remove attributes that should not be searched.

        $criteria=new CDbCriteria;
                $criteria->with = array(
                   'outlet' => array(
                        'joinType' => 'LEFT JOIN',
                        'select'=>'name',
                    ),

                );

        $criteria->compare('outlet_id',$this->outlet_id,true);
      $criteria->compare('outlet.name',$this->outlet_name,true);
        $criteria->compare('session_id',$this->session_id,true);


        $criteria->compare('username',$this->username,true);
        $criteria->compare('password',$this->password,true);
                $criteria->together = true; 
        return new CActiveDataProvider($this, array(
            'criteria'=>$criteria,
                    'sort' => array(
                //'defaultOrder'=>'LTRIM(t.name) ASC',
                'defaultOrder' => 't.id DESC',
            ),
            'pagination' => array(
                'pageSize' => 50,
            ),
        ));
    }

我的观点:

<?php 
//pr($model->search(),1);
$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'company-details-grid',
    'dataProvider' => $model->search(),
        'filter' => $model,
    'columns'=>array(
            array(
                    'class' => 'IndexColumn',
                    'header' => 'S.No.',
                ),
        array(
           'name'=>'id',
            'header'=>'ID',
            'value'=>'$data->id',
        ),

        array(
            'name' => 'outlet_name',
                 'value' => '($data->outlet->name)',
            ), 
    ),
));

&GT;

1 个答案:

答案 0 :(得分:0)

您的错误是因为当$data->outlet->name$data->outlet时,您试图获取null的值,而不是您的插座型号的实例。

使用value语句中的条件来检查$data->outlet是否有效:

array(
    'name' => 'outlet_name',
    'value' => '($data->outlet_id ? $data->outlet->name : "-")',
)