微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

cakephp在关联模型上查找查询条件

我在CakePHP应用程序中有一个模型User和一个模型Role.两种模型之间的关联如下:

User $belongsTo Role
Role $hasMany User

我想在User模型上查询以查找具有特定角色的所有用户(比如角色Supervisor).我这样做了我的查询

$supervisors = $this->User->find('all', array(
    'contain' => array(
        'Role' => array(
            'conditions' => array(
                'Role.name' => 'Supervisor'
            )
        )
    )
));

但上面的查询返回了我的users表中的所有用户.它不仅返回具有角色Supervisor的用户.我知道如果我做两个查询,一个在Role模型上找到角色类型’Supervisor’的id然后在User模型上做另一个查询并在我的User模型的条件中传递supervisor角色记录的id像这样:

$supervisor_role_id = $this->Role->field('id', array('Role.name' => 'Supervisor'));

$supervisors = $this->User->find('all', array(
    'conditions' => array(
        'User.role_id' => $supervisor_role_id
    )
));

上述查询将为我提供所需的结果.但我不想做2个查询来做到这一点.为什么第一种方法不起作用.有什么好主意吗?

谢谢

解决方法:

你的尝试不起作用的原因

CakePHP的Containble Behavior为每个模型创建单独的查询.所以 – 你所做的基本上是这样描述:“查找所有用户.同时找到任何名为’Supervisor’的角色.如您所见,两者之间没有任何条件.

因此,您可以执行以下操作之一:

1)[简单的方法]查询相反的方式

从角色模型查询并包含它的用户.这会拉动您想要的角色(根据您提供的条件),然后包含其中的任何/所有用户.

注意 – 如果您已经加载了“用户”模型(或者由于您位于UsersController中而认已加载),您可以运行您的查找:$this-> User-> Role-> find(….. – 所以你不必单独加载角色模型.

2)使用JOIN(见CakePHP Book on Joining Tables)

这允许您根据父模型的关联数据限制父模型的结果.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐