2017-11-22 21 views
0

"UserFlag"모델의 관계가있는 "User"모델의 결과를 표시하는 데 Cgridview를 사용하고 있습니다.Yii 관계형 모델의 중복 열 이름이있는 Cgridview

는 는

"사용자"모델은 -> tbl_user (ID, 이름, 비밀번호, 플래그) "깃발"모델 -> tbl_userFlag (ID, 플래그)

ID는 두 모델 모두에서 같은 의미한다. 그러나 플래그는 다르게 의미합니다 (데이터베이스를 수정할 수 없으므로이를 고수해야 함). 동일한 gridview에 표시해야합니다.

I 발생할 문제는 가있는 gridview가 제대로 두 플래그를 표시 할 수 있다는 것입니다하지만 실패하고 내가 정렬하고 "사용자"모델 플래그를 필터링 할 때 오류가 표시됩니다. (그러나 정렬 및 필터링 "UserFlag"모델에서 플래그에 대한 작동합니다.)

어떻게 해결할 수 있습니까?

오류 로그 :
CDbCommand failed to prepare the SQL statement: SQLSTATE[HY000]: General error: 1 ambiguous column name: flag.

"사용자"모델 :

class User extends CActiveRecord 
{ 

public function relations() 
{ 
    return array(
     'FLAG' => array(self::HAS_ONE, 'UserFlag','id'), 
    ); 
} 
public function search() 
{ 
    $criteria=new CDbCriteria; 
    $criteria->compare('id',$this->id); 
    $criteria->compare('name',$this->username,true); 
    $criteria->compare('password',$this->password,true); 
    $criteria->compare('flag',$this->flag,true); 
    $criteria->with = array(
     'FLAG' => array(
       'select' => 'FLAG.flag', 
       'together' => true, 
     ) 
    ); 
    $criteria->compare('FLAG.flag',$this->flagFromB,true); 


    return new CActiveDataProvider($this, array(
     'criteria'=>$criteria, 
     'sort'=> array(
      'attributes'=>array(
       'flagFromB' => array(
        'asc' => 'FLAG.flag', 
        'desc' => 'FLAG.flag DESC', 
       ), 
       '*', 
      ), 
     ), 
    )); 
} 

"UserFlag"모델 : 테이블 tbl_userFlag (ID, 플래그)

"사용자에
링크 보기 :

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'user-grid', 
    'dataProvider'=>$model->search(), 
    'filter'=>$model, 
    'columns'=>array(
     'id', 
     'username', 
     'password', 
     'email', 
     'flag', 

     array(
      'name' => 'flagFromB', 
      'type' => 'raw', 
      'value' => '$data->FLAG->flag', 
     ), 

     array(
      'class'=>'CButtonColumn', 
     ), 
    ), 
)); 

답변

0

모달 관계를 변경할 수 있습니다.

User.php 모달 파일.

<?php 
class User extends CActiveRecord { 

    public function relations() { 
     return array(
      'FLAG' => array(self::BELONGS_TO, 'UserFlag', 'id'), 
     ); 
    } 
    public function search() { 
     $criteria = new CDbCriteria; 
     $criteria->compare('id', $this->id); 
     $criteria->compare('name', $this->username, true); 
     $criteria->compare('password', $this->password, true); 
     $criteria->compare('flag', $this->flag, true); 
     $criteria->with = array(
      'FLAG' => array(
       'select' => 'FLAG.flag', 
       'together' => true, 
      ) 
     ); 
     $criteria->compare('FLAG.flag', $this->flagFromB, true); 


     return new CActiveDataProvider($this, array(
      'criteria' => $criteria, 
      'sort' => array(
       'attributes' => array(
        'flagFromB' => array(
         'asc' => 'FLAG.flag', 
         'desc' => 'FLAG.flag DESC', 
        ), 
        '*', 
       ), 
      ), 
     )); 
    } 

} 
?> 

도움이되기를 바랍니다.