【问题标题】:Query on Multiple Associations with CakePHP Models使用 CakePHP 模型查询多个关联
【发布时间】:2012-12-05 20:51:43
【问题描述】:

我是 CakePHP 的新手(昨晚开始),但遇到查询问题。

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

类组 > 用户 > 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'
                    )
                )
            )

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

【问题讨论】:

  • 加入可能是最好的选择......你为什么加入房间?你不应该加入 PermissionGroup 吗?
  • 抱歉,这是我在别处找到的一段代码,我从未更改过。

标签: php cakephp has-and-belongs-to-many


【解决方案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'
            )
    )

尝试使用它!

【讨论】:

  • 谢谢,效果很好。我真的厌倦了试图让它工作,你救了我一些理智。哦,我应该向其他人指出,我必须进行两次连接,因为我的关系是多对多的。第一个是具有 permissions_groups_users 的用户。第二个是 permission_groups_users 和 permissions_groups。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多