2012-11-14 94 views
0

我有一個與'menu_items'和'articles'相關的'menu_items_articles'表。 'articles'表與'tags'和'menu_items'具有HABTM關係cakephp 2.0加入

現在我想要獲得所有'articles'與特定的menu_tems.id及其相關的'tags'。

如果'文章'有4個標籤,則數組數量爲文章的4倍。我想要1次與所有標籤相關的文章。而且也只有一個文章

相關的標籤這是我有什麼

$this->MenuItemsArticle->recursive = -1; 

    $options['joins'] = array(
     array('table' => 'articles_tags', 
      'alias' => 'ArticlesTag', 
      'type' => 'inner', 
      'conditions' => array(
      'ArticlesTag.article_id = MenuItemsArticle.article_id' 
     ) 
    ), 
     array('table' => 'articles', 
      'alias' => 'Article', 
      'type' => 'inner', 
      'conditions' => array(
      'ArticlesTag.article_id = Article.id' 
     ) 
    ), 
     array('table' => 'tags', 
      'alias' => 'Tag', 
      'type' => 'inner', 
      'conditions' => array(
      'ArticlesTag.tag_id = Tag.id' 
     ) 
    ) 
); 

$options['conditions'] = array(
    'MenuItemsArticle.menu_item_id' => $menu_item 
); 

$options['fields'] = array('DISTINCT MenuItemsArticle.*',' Article.*','Tag.*'); 


$this->paginate = $options; 
$result = $this->paginate('MenuItemsArticle'); 
+0

當你說「table」時,它會讓你感到困惑,但是會列出模型名稱,反之亦然。 – Dave

回答

0

這是正常的連接 - 只需添加一個'group'選項(GROUP BY在MySQL)。

+0

這個工程,但我仍然得到標籤數組()中只有一個結果,儘管文章包含更多。 – waterschaats

+0

發佈生成的mysql查詢。 – Dave

+0

'SELECT'MenuItemsArticle'。'id','Article'。*''Tag'。'id'FROM'database'。'menu_items_articles'AS'MenuItemsArticle'inner JOIN'database'。'articles_tags'AS'ArticlesTag'ON ('ArticlesTag'。'article_id'='MenuItemsArticle'。'article_id')inner JOIN'database'。'articles'AS'Article'ON('ArticlesTag'。'article_id'='Article'。'id')inner JOIN 'database'。'tags'AS'Tag'ON('ArticlesTag'。'tag_id'='Tag'。'id')WHERE'Article'。'content_type'='blog'AND'MenuItemsArticle'。'menu_item_id'= 8 GROUP BY'Article'。'id'LIMIT 20' – waterschaats