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

时间:2013-06-24 14:58:48

标签: php cakephp web-applications

我很难将我的一些模型联系在一起。用户有三种角色之一:

  • 学生
  • 讲师
  • 管理

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

  • 用户有一名学生
  • 用户有一位讲师
  • 用户有一个管理员
  • 用户有一个RoleRequest
  • 学生属于用户
  • 讲师属于用户
  • 管理员属于用户

我正在努力的是,我无法找到一种检索用户数据的方法,而无需两次检索他们的角色或用户数据。如果我通过递归设置为2来检索User对象,那么我将获得两次用户数据,因为它也在Lecturer对象中。如果我对Lecturer对象做同样的事情,我会得到两次讲师数据,因为它也在User对象中。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

如果我理解你的问题,我猜你没有使用Contaible

通过这种行为,您可以执行类似

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

这将检索类似于

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

请记住将模型定义为可包含的。