我知道在这个主题上有一百万个帖子,通过它们我找到了不同的信息,找不到一个特定于我的问题,关于这个主题的过多的线程实际上没有比只有一个屈指可数。请有人花几分钟时间帮忙。
我有3个表,这里有相关的字段
Question (primary key = id)
Tag (primary key = id, text)
Question_Tag (question_id, tag_id)
问题模型关系
return array(
'tags'=>array(
self::MANY_MANY,
'Tags',
'question_tag(tag_id, question_id)'
),
'question_tag'=>array(
self::HAS_MANY,
'QuestionTag',
'question_id',
),
);
}
标记模型关系
return array(
'questions'=>array(
self::MANY_MANY,
'Questions',
'question_tag(question_id, tag_id)'
),
'question_tag'=>array(
self::HAS_MANY,
'QuestionTag',
'tag_id',
),
);
}
我有一个CGridView,在这个网格视图中我想显示问题记录(我可以做),我还要显示,所有与每个问题记录相关的标记记录,'text'字段,所以“标记.text“,在同一栏中。我还需要能够过滤这些标签,如果标签的实际搜索/过滤是针对每个Question_Tag记录单独完成的,则无关紧要,但是在Grid中显示它们应该在同一列中。
在阅读每个维基页面,教程和论坛帖子后,我不能为我的生活,弄清楚如何做到这一点。我可以找到解决方案的片段,但我不能把它们放在一起。我只使用Yii几天,所以我想我并不理解这一切。
有人能指出我如何处理这种情况的正确方向吗?
非常感谢!
答案 0 :(得分:0)
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider, //Data Provider Of Quuestions
'columns'=>array(
array(
'name'=>'name',
'value'=>'$data->name',
),
array(
'name'=>'tags'
'header'=>'Tags',
'value'=>array($this,'displayRelatedTags'),
),),));
上面的小部件将调用displayRelatedTags函数来显示标签,所以你在各自的控制器中编写了以下功能
public function displayRelatedTags($data,$row)
{
foreach($data->tags as $tag) /*$data->tags is relation which you defined as MANY TO MANY in Questions class*/
{
$arrTags[]=$tag->text;
}
return implode(',',$arrTags); /*It will display comma sepearated tags in same row*/
}