通过关联检索hasMany中的关联模型而不递归

时间:2014-03-02 15:57:19

标签: cakephp cakephp-2.3

我通过两个表之间的关联建立了一个hasMany - 书籍和作者。除了尝试检索属于书籍的所有作者时,关联才能正常工作。如果我这样做

$book = $this->Book->findById($id)

返回的数组有一个数组作者;它将具有AuthorToBook连接模型信息,但它不会自动获取与之关联的作者。

我必须将递归设置为2才能检索连接模型和关联的Author。我也正在为每个AuthorToBook协会重新获取Book数据。

'AuthorToBook' => array(
        (int) 0 => array(
            'id' => '1',
            'author_id' => '1',
            'book_id' => '2',
            'Author' => array(
                'id' => '1',
                'name' => 'J.R.R Tolkien',
                'date_of_birth' => '1892-01-03 00:00:00',
                'bio' => 'Professor and inventor of the Elvish Language'
            ),
            'Book' => array(
                'id' => '2',
                'title' => 'Return of the King',
                'pagecount' => '1200',
                'publisher_id' => '1'
            )
        )
    )

现在的问题是 - 如何在不设置递归参数的情况下获取由hasMany Through关系形成的关联模型?

这是来源

<?php
class Author extends AppModel
{
    public $hasMany = array('AuthorToBook');
}
?>

<?php
class AuthorToBook extends AppModel 
{
    public $useTable = 'authors_to_books';
    public $belongsTo = array('Author', 'Book');
}
?>

<?php
class Book extends AppModel {


    public $hasMany = array('AuthorToBook');

}
?>

1 个答案:

答案 0 :(得分:1)

Containable Behavior是你的朋友,是递归的替代品。它允许您准确指定要使用每个查询检索哪些关联模型。

递归是一件很酷的事情,但我们非常同意你不应该在做CakePHP的介绍教程之外实际使用它。在AppModel中设置public $recursive = -1;(默认情况下将其关闭),永远不要回头。