0

我知道关于这个主题有一百万零一个线程,通过它们我发现不同的信息并且找不到一个特定于我的问题的信息,关于这个主题的过多线程实际上比只有少数几个有用。请有人花几分钟时间帮忙。

我有 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,在这个网格视图中我想显示问题记录(我可以这样做),我还想显示与每个问题记录相关联的所有标签记录,“文本”字段,所以“tag.text” ,在同一列中。我还需要能够过滤这些标签,如果标签的实际搜索/过滤是针对每个 Question_Tag 记录单独完成的,但在网格中显示它们应该在同一列中,这并不重要。

在阅读了每个 wiki 页面、教程和论坛主题之后,我终其一生都无法弄清楚如何去做。我可以找到解决方案的片段,但我无法将它们放在一起。我只用了几天 Yii,所以我想我没有完全理解它。

谁能指出我如何处理这种情况的正确方向?

非常感谢!

4

1 回答 1

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*/
}
于 2013-08-05T11:50:28.283 回答