0

我希望对 CakePHP 有所了解的人可以对我一直遇到的问题有所了解。

这是我的场景,我有一个Userthis Userhas a Companywhich 又有很多Department很多Address。如果我得到一个User,我可以期望访问Company与它相关的所有模型Company吗?

那么会$user['Company']['Department'][0]$user['Company']['Address'][0]可能吗?

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

4

3 回答 3

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所属的记录,以及PhoneExtension属于User.

  • recursive = 2处,Cake 检索指定的模型,解析其所有直接关联及其直接关联所有关联。$this->User->find('all')将检索示例模型关系图中的所有内容:所有User记录、记录所属CompanyUser记录、属于 的所有PhoneExtension记录以及属于 的User所有DepartmentAddress记录Company

这是很长的一段话,是的,你可以达到你在问题中指出的结果,在recursive = 2

如果你想比你得到的更深入recursive = 2,你将不得不使用Containablebehavior。假设您的Department模型有一个额外的关联:hasMany Group. 因此:

User
-> belongsTo Company
   -> hasMany Department
      -> hasMany Group
   -> hasMany Address
-> hasMany PhoneExtension

要检索我们通过检索获得的所有内容recursive = 2以及所有相关Group记录,您可以这样构建Model::find调用:

$this->User->find('all', array(
    'contain' => array( 
        'PhoneExtension',
        'Company' => array(
            'Department' => array( 'Group' ),
            'Address'
        )
    )
));
于 2010-05-10T16:27:24.620 回答
0

它与您需要/希望的一样广泛。查看方法系列的recursive选项find()。还有Containable行为。您列出的特定参考是可能的,但直接在用户之下:

$user['Department'][0]

将其视为通过其公司拥有许多部门的用户。

于 2010-05-10T16:09:48.837 回答
0

如果您访问一个类/对象并设置“ $this->recursive = -1”,那么它只返回没有依赖关系的对象!

于 2010-05-10T16:12:45.243 回答