2016-06-20 12 views
1

に私はこれらのモデルを持っている: Yiiの2検索で2多くの多くの関係

class Article extends \yii\db\ActiveRecord 
{ 
    ..... 

    public function getTags() 
    { 
     return $this->hasMany(Tag::className(), ['id' => 'tag_id'])->viaTable('rel_tag_article', ['article_id' => 'id']); 
    } 

} 

class News extends \yii\db\ActiveRecord 
{ 
    ..... 

    public function getTags() 
    { 
     return $this->hasMany(Tag::className(), ['id' => 'tag_id'])->viaTable('rel_tag_news', ['news_id' => 'id']); 
    } 

} 

class Tag extends \yii\db\ActiveRecord 
{ 
    ..... 

    public function getRelTagArticles() 
    { 
     return $this->hasMany(RelTagArticle::className(), ['tag_id' => 'id']); 
    } 

    public function getRelTagNews() 
    { 
     return $this->hasMany(RelTagNews::className(), ['tag_id' => 'id']); 
    } 
} 

とコントローラ...here...の下

class ArticleController extends \yii\web\Controller 
{ 
    public function actionArticle($id_article) 
    { 


    $article = User::find($id_article); 

    ...... here .... 


    return $this->render('article'); 
    } 

} 

私は実際に共通のタグを持っているニュースを見つけなければならないで

記事。正しい方法は何ですか?

+0

を取得するためのタグを取得するために、物品のアクティブレコードを使用し、ターン使用タグにすることができます。 SELECT * FROM rel_tag_articleのようなもの INNER JOIN rel_tag_news t1 ON t.id = t1.id WHERE t.article_id = 123 'はうまくいくはずです。 – ineersa

答えて

0

##あなたがより良いのリクエストでそれを作るニュース##

class ArticleController extends \yii\web\Controller 
    { 
     public function actionArticle($id_article) 
     {    
     $article = User::find($id_article); 
     $tags=$article->tags; 
     $related_news=array(); 
     foreach($tags as $tag) { 
      $related_news=array_merge($tag->getRelTagNews(),$related_news); 
     } 

     return $this->render('related_news'); 
     }   
    } 

Visit this yii2 page