基于关系HAS_MANY数据的Yii CGridView构建表

时间:2014-01-29 16:54:33

标签: mysql yii cgridview

我有下表:问卷(主要),姓名,地址,电话。关系HAS_MANY(是的,我需要不同的名字)。

我正在尝试构建问卷调查ActionView - > CGridView包含来自Names的数据。

在姓名表中,我有: Names table 所以我需要CGridView,它在“问卷调查视图”中显示来自姓名的所有数据,其中id_questionnaire = $ this-> id。

但是我现在可以做的就是Names.name列显示全部在1行: AlexCorbenTest与$ data-> namesToString();

public function namesToString()
{
    $roles = $this->names;
    if($roles) {
        $string = '';
        foreach($roles as $role) {
            $string .= $role->name . ', ';
        }
        return substr($string,0,strlen($string)-1); // substr to remove trailing comma
    }
    return null;
}

$ model-> names-> name显示带有1行的空表:(

我的搜索()和$ this->小部件http://paste.ubuntu.com/6838820/

1 个答案:

答案 0 :(得分:1)

好的,我已经回答了自己,所以如果您需要从CGRidView中的另一个表中获取HAS_MANY关系中的数据,只是不要尝试使用关系(CActiveDataProvider),而是使用CSqlDataProvider。

public function getLNames(){

    $count=Yii::app()->db->createCommand('SELECT COUNT(*) FROM tbl_names WHERE id_questionnaire='.$this->id)->queryScalar();
            $sql = '
                SELECT *  FROM tbl_names
                WHERE id_questionnaire='.$this->id;

            return new CSqlDataProvider($sql,array('keyField' => 'id_name','totalItemCount'=>$count,));
    }

查看CGridView:

$this->widget('zii.widgets.grid.CGridView', array(
     'dataProvider'=>$model->getLNames(),

    'columns'=>array(

    array (
         'name'=>'names.name',
                'value'=>'$data[name]',
        ),

        array(
        'header'=>'Middle Name',
         'value'=>'$data[midname]',
                ),

        array(
        'header'=>'Last Name',
        'value'=>'$data[surname]',
        ),

    ),
));