CakePHP 3递归获取关联数据


CakePHP 3 Fetch associated data recursive

我正在尝试使用CakePHP 3.1 以递归方式(通过关联)获取数据

在Cake 3中,我可以使用"contain"键来获取下一级别的关联数据。但我需要再获得一个级别。有人知道怎么做吗?我读了文档,但没有在那里找到任何东西,谷歌也是如此。

三个级别的连接方式如下: OperationalCostInvoice (belongsTo Object) -> Object (hasMany OperationalCostTypes) -> OperationalCostType

使用OperationalCostInvoice->get($object_id, ['contain' => 'Object']),我可以获得与OperationalCostInvoice关联的对象,但我也想在一次调用中(如果可能的话)从对象中获取OperationalCostTypes。

我不需要关于关联链接的提示这样链接实体的原因是我可以很容易地实现历史记录功能。

提前感谢!

我只是想用一个函数调用(对Table对象)来获取所有内容。我知道需要多个查询。

只需创建自己的表方法,然后在一个数组中返回所有结果,或者实现任何您想要的并返回它

public function foo() {
    return [
        'one' => $this->find()...->all();
        'two' => $this->Asssoc->find()...->all();
    ];
}

但是在CakePHP 2中有一个递归选项,它控制了提取多少级别的相关数据。

recursive在Cake2是一件非常愚蠢的事情。我们一直做的第一件事是在AppModel中将其设置为-1,以避免不必要的数据获取。使用contain总是更好的选择。我根本不会使用recursive尤其是用于更深层次。

同样包含,就像在Cake2中一样,仍然能够获取多个级别的深度关联。

$this->find()->contain([
    'FirstLevel' => [
        'SecondLevel' => [
            'ThirdLevel'
        ]
    ]
])->all();