2015-09-22 53 views
2

我無法從數據庫中檢索數據,我已將表用戶加入表family_tree三次。 CdbCommand返回從第一個表(family_tree)中選擇的值罰款,但從第二個和第三個表(用戶)中選擇的數據不返回。CDBCriteria加入不返回第二個和第三個表選擇的數據

表的模式是:

用戶
USER_ID | user_fullname

family_tree
tree_creator_id | tree_user1_id | tree_user2_id

模型/ familytree.php:

public function search() 
{ 
    // @todo Please modify the following code to remove attributes that should not be searched. 

    $criteria=new CDbCriteria; 
    //$criteria->alias='FamilyTree'; 
    $criteria->select='t.*,A.*,B.*,C.*';   
    $criteria->join = 'join user A on A.user_id=tree_user1_id 
    join user B on B.user_id=tree_user2_id 
    join user C on C.user_id=tree_creator_id'; 

    $criteria->compare('tree_id',$this->tree_id,true);   
    $criteria->compare('tree_creator_id',$this->tree_creator_id,true); 
    $criteria->compare('tree_user1_id',$this->tree_user1_id,true); 
    $criteria->compare('tree_user2_id',$this->tree_user2_id,true); 
    $criteria->compare('tree_type',$this->tree_type,true); 
    $criteria->compare('tree_type_name',$this->tree_type_name,true); 
    $criteria->compare('tree_grey_flag',$this->tree_grey_flag); 
    //$criteria->join('user', 'tree_creator_id=user.user_id'); 
    //$criteria->compare('tree_user_id',$this->A->user_fullname, true); 

    return new CActiveDataProvider($this, array(
     'criteria'=>$criteria, 
    )); 
} 

視圖/譜系圖/ admin.php的

<?php echo CHtml::link('Advanced Search','#',array('class'=>'search-button')); ?> 
<div class="search-form" style="display:none"> 
<?php $this->renderPartial('_search',array(
'model'=>$model, 
)); ?> 
</div><!-- search-form --> 

<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'family-tree-grid', 
'dataProvider'=>$model->search(), 

'columns'=>array(
    'tree_id', 
    'tree_creator_id', 
    'C.user_fullname', 
    'tree_user1_id', 
    'A.user_fullname', 
    'tree_user2_id', 
    'B.user_fullname', 
    'tree_type', 
    'tree_type_name', 

    /*'tree_grey_flag',*/ 

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

回答

0

請你可以試試這個下面的代碼:

模型/ familytree.php

/** 
* @return array relational rules. 
*/ 
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(
     'treeCreaterRel' => array(self::BELONGS_TO, 'user', 'tree_creator_id'), 
     'treeUser1Rel' => array(self::BELONGS_TO, 'user', 'tree_user1_id'), 
     'treeUser2Rel' => array(self::BELONGS_TO, 'user', 'tree_user2_id'), 

    ); 
} 

public function search() 
{ 
    // @todo Please modify the following code to remove attributes that should not be searched. 

    $criteria=new CDbCriteria; 


    $criteria->with = array('treeCreaterRel', 'treeUser1Rel', 'treeUser2Rel'); 
    $criteria->together = true; 

    $criteria->compare('tree_id',$this->tree_id,true);   
    $criteria->compare('tree_creator_id',$this->tree_creator_id,true); 
    $criteria->compare('tree_user1_id',$this->tree_user1_id,true); 
    $criteria->compare('tree_user2_id',$this->tree_user2_id,true); 
    $criteria->compare('tree_type',$this->tree_type,true); 
    $criteria->compare('tree_type_name',$this->tree_type_name,true); 
    $criteria->compare('tree_grey_flag',$this->tree_grey_flag); 

    return new CActiveDataProvider($this, array(
     'criteria'=>$criteria, 
     'pagination'=>array(
      'pageSize'=>'10', //Yii::app()->params['defaultPageSize'], 
      //'currentPage'=>$currentPage 
     ), 
     'sort'=>array(
      'defaultOrder'=>array(
       'tree_id'=>CSort::SORT_DESC 
      ), 
     ), 
    )); 
} 

視圖/譜系圖/ admin.php的

<?php echo CHtml::link('Advanced Search','#',array('class'=>'search-button')); ?> 

<div class="search-form" style="display:none"> 
    <?php $this->renderPartial('_search',array(
    'model'=>$model, 
    )); ?> 
</div><!-- search-form --> 

<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'family-tree-grid', 
'dataProvider'=>$model->search(), 

'columns'=>array(
    array(
     'header' => 'Tree Id', 
     'name' => 'tree_id', 
     'value' => '$data->tree_id' 
    ), 
    array(
     'header' => 'Tree Creater Id', 
     'name' => 'tree_id', 
     'value' => '$data->tree_id' 
    ), 
    array(
     'header' => 'Tree Creater Name', 
     'name' => 'tree_creator_id', 
     'value' => '$data->treeCreaterRel->user_fullname' 
    ), 
    array(
     'header' => 'Tree User1 Name', 
     'name' => 'tree_user1_id', 
     'value' => '$data->treeUser1Rel->user_fullname' 
    ), 
    array(
     'header' => 'Tree User1 id', 
     'name' => 'tree_user1_id', 
     'value' => '$data->tree_user1_id' 
    ), 
    array(
     'header' => 'Tree User2 Name', 
     'name' => 'tree_user2_id', 
     'value' => '$data->treeUser2Rel->user_fullname' 
    ), 
    array(
     'header' => 'Tree User2 id', 
     'name' => 'tree_user2_id', 
     'value' => '$data->tree_user2_id' 
    ), 
    'tree_type', 
    'tree_type_name', 
    array(
     'class'=>'CButtonColumn', 
    ), 
), 
)); ?> 
相關問題