我有下表:问卷(主要),姓名,地址,电话。关系HAS_MANY(是的,我需要不同的名字)。
我正在尝试构建问卷调查ActionView - > CGridView包含来自Names的数据。
在姓名表中,我有: 所以我需要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/
答案 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]',
),
),
));