【问题标题】:CDBCriteria join doesn't return data of 2nd and 3rd table selectedCDBCriteria 连接不返回选定的第二个和第三个表的数据
【发布时间】:2015-09-22 00:42:00
【问题描述】:

我在从数据库中检索数据时遇到问题,我已将表用户三次加入表 family_tree。 CdbCommand 可以很好地返回从第一个表(family_tree)中选择的值,但不会返回从第 2 和第 3 表(用户)中选择的数据。

表的架构是:

用户
用户 ID |用户全名

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,
    ));
}

查看/familytree/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',
    ),
),
)); ?>

【问题讨论】:

    标签: php mysql yii


    【解决方案1】:

    请你试试下面的代码:

    model/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
                ),
            ),
        ));
    }
    

    查看/familytree/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',
        ),
    ),
    )); ?>
    

    【讨论】:

      猜你喜欢
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      • 2014-11-10
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多