我试图使用CakePHP 3.1以递归方式(通过关联)获取数据。
在Cake 3中,我可以使用“包含”键来获取下一级别的asociated数据。但我得再拿一层。有人知道怎么做吗?我读了那些文档,但没有在那里找到任何东西,与谷歌是一样的。
这三个级别的连接方式如下:OperationalCostInvoice (belongsTo Object) -> Object (hasMany OperationalCostTypes) -> OperationalCostType
使用OperationalCostInvoice->get($object_id, ['contain' => 'Object']),我可以获得与OperationalCostInvoice相关联的对象,但我也希望(如果可能的话)只在一个调用中从对象中获取OperationalCostTypes。
我不需要关于关联链接的提示,像这样链接实体的原因是我可以很容易地实现一个历史函数。
提前感谢!
发布于 2015-10-28 17:12:30
我只是指一个函数调用(在Table对象上)来获取所有内容。我知道需要一个以上的查询。
只需创建您自己的表方法,然后在一个数组中返回所有结果,或者实现任何您想要的结果并返回它。
public function foo() {
return [
'one' => $this->find()...->all();
'two' => $this->Asssoc->find()...->all();
];
}但是在CakePHP 2中有一个递归选项,它控制获取多少级别关联的数据。
recursive在Cake2是个相当愚蠢的东西。我们一直做的第一件事就是在-1中将其设置为AppModel,以避免不必要的数据获取。使用包含总是更好的选择。我完全不使用recursive,尤其是在更深的层次上。
与Cake2中的情况一样,contain仍然能够获取多个级别的深度关联。
$this->find()->contain([
'FirstLevel' => [
'SecondLevel' => [
'ThirdLevel'
]
]
])->all();https://stackoverflow.com/questions/33396461
复制相似问题