2017-11-22 7 views
0

"UserFlag"モデルからのリレーションを持つ "User"モデルの結果を表示するのにCgridviewを使用しています。Yiiリレーショナルモデルの列名が重複しているCgridview

"ユーザー" モデル - > tbl_user(ID、名前、パスワード、フラグ) "フラグ" モデル - > tbl_userFlag(ID、フラグ)

IDは、両方のモデルから同じことを意味します。 しかし、フラグは異なっています(私はデータベースを変更できないので、それに固執する必要があります)。そして、私はそれらを同じgridviewに表示する必要があります。私が遭遇

問題が 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', 
        ), 
        '*', 
       ), 
      ), 
     )); 
    } 

} 
?> 

私はそれが役に立ちそうです。

関連する問題