在询问之前我尝试“做我的功课”,但我尝试的方法似乎都不起作用,所以我需要帮助。(我不是 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>
其他所有内容(如索引页面)与我第一次提到的链接中的相同。