我对 CakePHP 很陌生(昨晚开始),我遇到了查询问题。
我的模型的工作方式是这样的:
类组 << hasAndBelongsTo >> 用户 << hasAndBelongsTo >> PermissionsGroups
基本上,一个类组由大量用户组成,每个用户都属于一个权限组。该组定义了他们是什么类型的用户以及他们的权限。
现在我需要进行查询,在其中获取属于某个 PermissionGroup 的所有用户,但我是从 ClassgroupsController 进行的。
但是,每当我尝试这样做时:
$this->Classgroup->User->find('list', array(
'fields' => array('User.surname_firstname'),
'order' => array(
'User.surname_firstname'
),
'conditions' => array(
'PermissionGroup.permissions' => '10'
)
)
我收到此错误:
Column not found: 1054 Unknown column 'PermissionGroup.permissions' in 'where clause'
因为我在 ClassgroupController 中,所以好像看不到 Group 字段,但我会假设因为 User 与 PermissionGroup 相关联,所以应该没问题。我已经建立了 3 个模型之间的关联,但问题似乎是查询在模型中看起来不够“深入”。
我还尝试将 find 的递归值设置为 2,3 和 4。从我读过的内容来看,我认为这可能不是一个好主意,而且 Containable 更好,但它肯定至少应该有效吗?
我还应该指出,这些关联是一种方式。我只将它们添加到我需要的模型中。所以 Classgroups 与 User 有关联,而 User 与 PermissionGroup 有关联
我在做一些明显错误的事情吗?还是我误解了 CakePHP 的概念?谢谢
更新:我第二次看到有人说我应该使用联接,如下所示:
'joins'=>array(
array(
'table'=>'rooms',
'alias'=>'Room',
'type'=>'inner',
'conditions'=>array(
'Room.hotel_id'=>'Hotel.id'
)
)
但我觉得这是一种过时的方式......我也尝试过像这样使用包含:
'contain' => array(
'Group' => array(
'conditions' => array(
'Group.name' => '10'
)
)
)
但它没有用,我仍然得到了所有的用户。