CakePHP 3 递归获取关联数据

Kev*_*yer 1 php recursion cakephp cakephp-3.0

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

在 Cake 3 中,我可以使用“contain”键来获取下一级的关联数据。但我需要再升一级。有谁知道如何做到这一点?我阅读了文档,但没有找到任何东西,用谷歌它是一样的。

这 3 个级别的连接如下: OperationalCostInvoice (belongsTo Object) -> Object (hasMany OperationalCostTypes) -> OperationalCostType

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

我不需要有关关联链接的提示,像这样链接实体的原因是我可以轻松实现历史功能。

提前致谢!

bur*_*zum 5

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

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

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

但在 CakePHP 2 中,有一个选项 recursive 可以控制获取关联数据的级别。

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

与 Cake2 中一样,包含 still 也能够获取多于一层的深层关联。

$this->find()->contain([
    'FirstLevel' => [
        'SecondLevel' => [
            'ThirdLevel'
        ]
    ]
])->all();
Run Code Online (Sandbox Code Playgroud)