CakePHP - 在模型中查找没有 hasMany 关系的 hasMany 关联?

Posted

技术标签:

【中文标题】CakePHP - 在模型中查找没有 hasMany 关系的 hasMany 关联?【英文标题】:CakePHP - Find hasMany association without hasMany relation in Model? 【发布时间】:2015-05-15 08:39:40 【问题描述】:

我想再问你一个关于 Cakephp 的问题:我有 2 个模型用户和评论,关系为 1-n(一个用户有很多评论)。我想用 find() 来列出用户信息和它的 cmets 格式数据返回:

Array
(
    [User] => Array
        (
            [id] => 121
            [name] => Gwoo the Kungwoo
            [created] => 2007-05-01 10:31:01
        )
    [Comment] => Array
        (
            [0] => Array
                (
                    [id] => 123
                    [user_id] => 121
                    [title] => On Gwoo the Kungwoo
                    [body] => The Kungwooness is not so Gwooish
                    [created] => 2006-05-01 10:31:01
                )
            [1] => Array
                (
                    [id] => 124
                    [user_id] => 121
                    [title] => More on Gwoo
                    [body] => But what of the 'Nut?
                    [created] => 2006-05-01 10:41:01
                )
        )
)

但我不想在模型用户中配置关系 hasMany 作为链接中的示例:http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html。我试过这段代码:

 $data = $this->User->find('all', array(
                'joins' => array(
                    array(
                        'table' => 'comment',
                        'alias' => 'Comment',
                        'type' => 'LEFT',
                        'conditions' => array(
                            'User.id = Comment.user_id'
                        )
                    ),
                    'conditions' => array(
                       'User.id' => $userId
                    ),
                     'fields' => array('User.*', 'Comment.*')
            ));

Cake 返回一个包含重复用户记录的数组(例如:如果用户有 2 个 cmets,则返回 2 个用户重复记录)。

谁能给我另一个解决方案? (但配置有很多关系模型的解决方案除外),谢谢。

【问题讨论】:

请检查:- ***.com/questions/10344315/… 你没有定义 hasMany 关系的原因是什么? 【参考方案1】:

您也可以在控制器中使用 bindModel

        $this->User->bindModel(
               array(
                 'hasMany'=>array(
                     'Comment' =>array(
                      'className' => 'Comment',
                      'foreignKey' => 'user_id',
                      'conditions' => array('Comment.status' => 'Active'),
                  )         
               )
            )
        ); 

        $data = $this->User->find('all',array('conditions'=>array('User.email'=>$userEmail)));

了解更多info

更新

查看此answer 了解一些信息,通过此link 查看有关绑定和取消绑定模型的详细信息

【讨论】:

非常感谢!你节省了我的时间:) 但是如果我使用 bindModel(),我是否使用 unbindModel() 来删除关联? 是的,如果您不想要不必要的数据。

以上是关于CakePHP - 在模型中查找没有 hasMany 关系的 hasMany 关联?的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 查找相关模型数据

CakePHP 多模型关联

如何将 CakePHP 2 模型关联更改为与 bindModel 和自定义查找器的深度链接?

在 CakePHP 中保存没有数据的模型(只需在 db 中创建 id)

CakePHP将数据导入到没有模型的表中

CakePHP3 迭代模型不起作用