CakePhp 2.5 $ belongsTo有两种型号

时间:2018-08-02 19:40:51

标签: php mysql cakephp cakephp-2.5

现在我有这个: 团体 内部组中有子组 在子组中,我们有评论

子组属于组1、2、3;子组表具有group_id字段 注释属于子组A,B,C;评论表中有subgroup_id字段

我的模特:

CommentsGroup.php

<?php

App::uses('AppModel', 'Model');

class CommentsGroup extends AppModel {

    public $useTable = 'comment_groups';

}

CommentsSubGroup.php

<?php

App::uses('AppModel', 'Model');

class CommentsSubGroup extends AppModel {

    public $useTable = 'comment_subgroups';

    public $belongsTo = array(
        'CommentsGroup' => array(
            'className'  => 'CommentsGroup',
            'foreignKey' => false,
            'conditions' => ['`CommentsGroup`.`id` = `CommentsSubGroup`.`group_id`']
        )
    );

}

Comment.php

<?php

App::uses('AppModel', 'Model');

class Comment extends AppModel {

    public $belongsTo = array(
        'CommentsSubGroup' => array(
            'className' => 'CommentsSubGroup',
            'foreignKey' => false,
            'conditions' => ['`CommentsSubGroup`.`id` = `Comment`.`subgroup_id`']
        )
    );

}

当我尝试从控制器中获取与注释相关的subgroup_id时,就可以了。当我尝试获取更多信息(将group_id链接到subgroup_id)时,我失败了。

不进行递归查询是可以的,否则我将:

$data = $this->_Model->find('all', ['conditions' => ['subgroup_id' => $id], 'recursive' => 2, 'order' => [$this->_Modelname . '.id' => 'DESC']]);

考虑到$this->_Model等于Comment

我遇到的错误:

  

数据库错误错误:SQLSTATE [42S22]:找不到列:1054未知   “ where子句”中的“ CommentsSubGroup.group_id”列

     

SQL查询:SELECT CommentsGroupidCommentsGroupname FROM   botobot_comments所在的comment_groupsCommentsGroup   CommentsGroupid = CommentsSubGroupgroup_id

有猜到吗?还是我错了,应该使用$ hasMany关系?

谢谢。

1 个答案:

答案 0 :(得分:0)

使用belongsTo关系是正确的,但是需要指定foreignKey属性才能使关系起作用。您还需要从conditions键中删除连接条件(因为Cake可以根据外键确定连接条件)。

例如:

App::uses('AppModel', 'Model');

class Comment extends AppModel {

    public $belongsTo = array(
        'CommentsSubGroup' => array(
            'className' => 'CommentsSubGroup',
            'foreignKey' => 'subgroup_id'
        )
    );

}

您还需要在模型和表中遵循Cakes命名约定,否则需要在各自的模型中显式声明表名和主键。

在您的情况下,CommentsSubGroup应该为CommentSubGroup,假设假设表名为comment_sub_group和主键comment_sub_group_id