0

我对 CakePHP 很陌生(昨晚开始),我遇到了查询问题。

我的模型的工作方式是这样的:

类组 << hasAndBelongsTo >> 用户 << hasAndBelongsTo >> PermissionsGroups

基本上,一个类组由大量用户组成,每个用户都属于一个权限组。该组定义了他们是什么类型的用户以及他们的权限。

现在我需要进行查询,在其中获取属于某个 P​​ermissionGroup 的所有用户,但我是从 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'
                    )
                )
            )

但它没有用,我仍然得到了所有的用户。

4

1 回答 1

1

你在正确的轨道上加入:

$joins = array(
    array(
     'table'=>'permission_groups',
     'alias'=>'PemissionGroup',
     'type'=>'inner',
     'conditions'=>array(
          'User.id = PermissionGroup.user_id',
          'PermissionGroup.permissions = 10'
     )
 )


    $this->Classgroup->User->find('list', array(
        'fields' => array('User.surname_firstname'),
        'joins' => $joins,
        'order' => array(
                'User.surname_firstname'
            )
    )

尝试使用它!

于 2012-12-05T21:53:30.497 回答