0

このテーマには 100 万と 1 つのスレッドがあることを知っています。それらを調べてみると、さまざまな情報が見つかり、私の問題に固有のスレッドを見つけることができません。誰か助けてください。

私は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 に答える