获取所有belongsTo关系以及CakePHP上的一些HABTM

时间:2014-12-17 11:57:37

标签: php cakephp cakephp-2.3

我在使用CakePHP 2.3 HABTM时尝试只获得一个paginate关系。

现在我得到了这个结果:

Array
(
    [0] => Array
        (
            [Ticket] => Array ( .....)
            [User] => Array ( .....)
            [Priority] => Array ( .....)
            [Status] => Array(....)
            [Attachment] => Array(....)
            ....
        )
    [1] => ....
    [2] => ....

)

使用:

    $this->Ticket->recursive = 0;
    $this->paginate = array(
            'limit' => 20
    );

我正在使用$this->Ticket->recursive = 0;,因为我只对belongsTo与其他表的关系感兴趣,但与此同时,我只想获得HABTM中的一个关系。

我知道我可以实现它添加contain数组中的每个单一关系,如下所示:

    $this->Ticket->recursive = 0;
    $this->paginate = array(
            'limit' => 20,
            'contain' => array(
                    'Ticket`, `User`, `Priority`, `Status`, `Attachment`, `Tags`...
            )
    );

但我有很多桌子,我想知道是否有任何方法可以做到这一点,而无需命名contain数组中的每一个表。

我还尝试使用contains内的recursive array,如下所示:

    //getting the filtered tickets
    $this->paginate = array(
            'limit' => 20,
            'contain' => array(
                    'Ticket' => array('recursive' => 1),
                    'Tag' //this is the hasMany relationship 
            )
    );

但它没有用。有没有办法实现这一目标,而无需命名所有表格以使其更易于维护?

1 个答案:

答案 0 :(得分:1)

好的,因为它似乎没有解决方案,我设法通过获取类型belongsTo的关联模型,然后添加HABTM关系的模型名称来实现:

$associations = $this->Ticket->getAssociated('belongsTo');
$associations[] = 'Tag';

//getting the filtered tickets
$this->paginate = array(
        'limit' => 20,
        'contain' => $associations
);