尋ねる前に「宿題をする」ことを試みましたが、試した方法はどれもうまくいかないようで、助けが必要です。(私はYiiの専門家ではありません)
私の問題は、タグで映画を検索するのに役立つ検索ボックスをインデックスページに表示したいということです。役に立つ記事を見つけた ので、基本的にはそれで始めました。
私は次のテーブルを持っています:
映画
鬼ごっこ
movie_has_tag(movie_idとtag_idが含まれています)
//検索に必要だと思うのはmovie_titleとtag_nameです
BaseMovieの関係:
public function relations(){
return array(
'tags' => array(self::MANY_MANY, 'Tag', 'movie_has_tag(movie_id, tag_id)'),
);
}
BaseTagの関係:
public function relations(){
return array(
'movies' => array(self::MANY_MANY, 'Movie', 'movie_has_tag(tag_id, movie_id)'),
);
}
私はそれをこのように試しました:
public function actionIndex(){
if( isset($_GET['q']) ){
$model = new Movie($scenario='search');
$model->unsetAttributes();
$tag = $_GET['q'];
// this is how I tried
$tags = Movie::model()->with('tags')->findAllByAttributes( array('movie_title' => $tag));
$this->render('index',array(
'dataProvider'=>$model->search(),
));
}
このコードでは、検索ボックスに入力し始めても何も起こりません。
編集:
@Stu
リンクを読んで、次のことを思いついた。この関係をBaseMovieに追加しました:
'tagz' => array(self::HAS_MANY, 'Tag', array('movie_id'=>'tag_id', 'through'=>'MovieTags')).
次に、actionIndexにあるものを編集しました。
if( isset($_GET['q']) ){
$model = new Movie($scenario='search');
$model->unsetAttributes();
$movies = Movie::model()->withTag($_GET['q'])->findAll();
$tags = $movies->movieTags;
}
インスタント検索ボックスに入力を開始すると、すべてのムービーが消えます(入力した内容を削除しても、どのムービーも表示されません。ページを更新する必要があります)。
v2の編集:_viewは非常に単純です:
<div class="view">
<?php echo CHtml::encode($data->title); ?>
</div>
他のすべて(インデックスページなど)は、最初に言及したリンクと同じです。