如果我使用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;
答案 0 :(得分:0)
您的错误是因为当$data->outlet->name
为$data->outlet
时,您试图获取null
的值,而不是您的插座型号的实例。
使用value
语句中的条件来检查$data->outlet
是否有效:
array(
'name' => 'outlet_name',
'value' => '($data->outlet_id ? $data->outlet->name : "-")',
)