CakePHP模型链接中的Object有多广泛?

时间:2010-05-10 14:56:17

标签: cakephp model associations linkage

我希望对CakePHP有所了解的人能够对我一直存在的问题有所了解。

这是我的方案,我有一个UserUser有一个Company,而Department又有很多Address和许多User。如果我要获得Company,我希望能够访问Company以及与该$user['Company']['Department'][0]相关联的所有模型吗?

那么$user['Company']['Address'][0]或{{1}}可能吗?

这让我回到最初的问题,模型之间的联系有多广泛?

3 个答案:

答案 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}}以及所有UserDepartment条记录。

这是很长的说法,你可以在Address处达到你在问题中指出的结果。

如果您希望更深入而不是Company获得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”,那么它只返回没有依赖项的对象!