我希望对CakePHP有所了解的人能够对我一直存在的问题有所了解。
这是我的方案,我有一个User
此User
有一个Company
,而Department
又有很多Address
和许多User
。如果我要获得Company
,我希望能够访问Company
以及与该$user['Company']['Department'][0]
相关联的所有模型吗?
那么$user['Company']['Address'][0]
或{{1}}可能吗?
这让我回到最初的问题,模型之间的联系有多广泛?
答案 0 :(得分:4)
在普通香草模型中,Cake的模型链接由模型的recursive
属性决定。您的示例模型关系如下所示:
User
-> belongsTo Company
-> hasMany Department
-> hasMany Address
-> hasMany PhoneExtension
(我添加了一个额外的关系(User hasMany PhoneExtension
)来充实以下解释。)
Model::recursive
有三个可接受的值:-1,0,1和2.每个值都表示Cake的ORM检索模型记录的深度不同。我将使用$this->User->find('all')
来说明差异。
在recursive = -1
,Cake仅检索指定的模型(即User
)。它不解析任何模型关联。
在recursive = 0
,Cake检索指定的模型,并解析其belongsTo
关联。 $this->User->find('all')
会检索所有User
条记录,以及每个Company
所属的User
记录。
在recursive = 1
,Cake检索指定的模型,并解析其所有直接关联。 $this->User->find('all')
将检索所有User
条记录,以及每个Company
所属的User
记录以及属于{{1}的所有PhoneExtension
条记录}。
在User
,Cake检索指定的模型,解析所有直接关联和其直接关联的所有关联。 recursive = 2
将检索示例模型关系图中的所有内容:所有$this->User->find('all')
条记录,User
记录所属的Company
条记录,属于的所有User
条记录属于PhoneExtension
的{{1}}以及所有User
和Department
条记录。
这是很长的说法,你可以在Address
处达到你在问题中指出的结果。
如果您希望更深入而不是Company
获得1}},则必须使用Containable
behaviour。假设您的recursive = 2
模型还有其他关联:recursive = 2
。因此:
Department
要检索我们通过hasMany Group
检索获得的所有内容以及所有相关的User
-> belongsTo Company
-> hasMany Department
-> hasMany Group
-> hasMany Address
-> hasMany PhoneExtension
记录,您可以构建recursive = 2
这样的调用:
Group
答案 1 :(得分:0)
它与您需要/希望它一样广泛。查看recursive
系列方法的find()
选项。也是Containable
行为。您列出的具体参考文献是可能的,但直接在用户下:
$user['Department'][0]
将其视为拥有多个部门到其公司的用户。
答案 2 :(得分:0)
如果您访问一个类/对象并设置“$this->recursive = -1
”,那么它只返回没有依赖项的对象!