2014-03-25 15 views
0

我有一个2 CakePHP的模型,文章和分类,使用hasAndBelongsToMany关系连接,就像这样:CakePHP:HABTM关系返回连接表作为对象 - 我该如何摆脱它?

$category = new Category(); 
    $category->bindModel(array('hasAndBelongsToMany' => array(
     'Article' => array(
        'className' => 'Article', 
        'joinTable' => 'articles_categories', 
        'foreignKey' => 'category_id', 
        'associationForeignKey' => 'article_id', 
        'fields' => 'id,name' 
        )))); 

$this->set('categories', $category->find('all', 
     array(
      'fields' => 'id,name' 
     ))); 

......但后来,当我打印出$类,我得到如下:

Array 
(
[0] => Array 
    (
     [Category] => Array 
      (
       [id] => 31 
       [name] => category name 
       [article_count] => 1 
      ) 

     [Article] => Array 
      (
       [0] => Array 
        (
         [id] => 1445 
         [name] => article name 
         [teaser] => 
         [author_id] => 3 
         [ArticlesCategory] => Array 
          (
           [id] => 6634 
           [article_id] => 1445 
           [category_id] => 31 
           [author_id] => 3 
           [created] => 2014-03-10 12:27:26 
           [modified] => 2014-03-10 12:27:26 
          ) 

        ) 

      ) 

    ) 

我真的不需要[Articles]的[ArticlesCategory]成员。这只会让我回到我已有的信息。我试图限制递归,但没有帮助。

我该如何摆脱这个?

回答

0

你有两个选择:

[1]减少递归值设为0(CakePHP默认:1)

$category->recursive = 0; 
$category->find('all', 
     array(
      'fields' => 'id,name' 
     )) 

[2]开始使用ContainableBehaviour(我自己的偏好),它给你更多在模型数据控件获得

添加下列AppModel为App-覆盖面广:

public $actsAs = array('Containable'); 

查找方法变为:

$category->find('all', 
     array(
      'fields' => 'id, name', 
      'contain' => 'Article' 
     )) 

这应该这样做!

相关问题