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

子组属于组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_commentscomment_groups AS CommentsGroup在哪里
  CommentsGroupid = CommentsSubGroupgroup_id


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

谢谢。

最佳答案

您正确使用了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

关于php - CakePhp 2.5 $属于两个型号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51661043/

10-10 09:40