在CakePHP中管理双向关系,而不需要两次检索数据


Managing a 2 way relationship in CakePHP without retrieving data twice

我在将一些模型链接到一起时遇到了麻烦。用户有三种角色之一:

  • 学生
  • 讲师
  • 管理员

3个角色之间共享的信息存储在User表中。当用户想要更改其角色时,他们会发出角色请求,管理员必须接受该请求。

  • 用户有一个学生
  • 用户有一名讲师
  • 用户有一个管理员
  • 用户有一个角色请求
  • 学生属于用户
  • 讲师属于用户
  • 管理员属于用户

我正在努力解决的问题是,如果不检索用户的角色或用户数据两次,我就无法找到检索用户数据的方法。如果我检索递归设置为2的User对象,我会得到两次用户数据,因为它也在讲师对象中。如果我对讲师对象做同样的操作,我会得到讲师数据两次,因为它也在User对象中。

不要使用递归。在AppModel中设置public $recursive=-1;,然后使用CakePHP的惊人的ContainableBehavior来检索您想要的任何数据。

如果我正确理解了你的问题,我猜你没有使用Contable。

有了这种行为,你可以做一些类似的事情

$this->User->find('all', array('contain'=>'Lecturer'));

并且将检索类似于的阵列

[User] => array(/*user data*/),
[Lecturer] => array(/*Lecturer data*/)

只需记住将您的模型定义为可容纳的。