【问题标题】:CakePHP Model Query ConstructionCakePHP 模型查询构建
【发布时间】:2011-07-30 23:16:42
【问题描述】:

您好,我刚开始使用 CakePHP,想知道如何进行某个查找查询。

基本上,我有一个名为 User 的模型,它与另一个名为角色的模型有 hasMany 关系。我想基本上按照以下方式执行 SQL 调用:

选择 * 来自用户 存在的地方( 选择 * FROM 角色 WHERE user_id = users.id )

同时也获取hasMany相关数据。

但是除了直接写出 MySQL 之外,我无法弄清楚在 CakePHP 中执行此操作的最佳方法是什么。谢谢!

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    @Ehtesham:最好使用Containable 查找用户和相关角色记录:

    $this->User->find('first',array(
        'conditions'=>array('User.id'=>$some_id),
        'contain'=>array('Role')
    ));
    

    “SELECT * FROM users WHERE EXISTS (SELECT * FROM roles WHERE user_id = users.id)”:如果我理解正确,您想查找至少拥有 1 个角色的所有用户吗?如果是这样,您应该设置counterCache 并在查找'User.role_count >'=>0 中再添加一个条件

    【讨论】:

    • 当然,如果您只想从角色表中提取。但是如果用户有其他关联并且也需要被拉出怎么办。
    【解决方案2】:

    在用户控制器中

      $this->User->find('all', array('conditions' => array('User.id' => 'Role.user_id'), 'recursive' => 1));
    

    指定递归 1 也会拉取所有相关数据

    【讨论】:

    • 嗯,尽管上面的 MySQL 查询返回 8 行,但我似乎根本没有得到任何结果。
    • 出现错误,模型名称必须是单数,即用户而不是用户。我已经更新了答案。
    • 它很模棱两可,你想让所有用户都有特定的角色吗?
    • 对不起,我含糊了——所有在角色表中具有一个或多个角色行的用户
    • 好吧,如果一个用户有很多角色,那么我猜一个角色可能属于多个用户。如果是这种情况,它应该是一个 HABTM 关联而不是 hasMany,试试这个:book.cakephp.org/view/1044/hasAndBelongsToMany-HABTM
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多