现在我有这个: 团体 内部组中有子组 在子组中,我们有评论
子组属于组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
CommentsGroup
。id
,CommentsGroup
。name
FROMbotobot_comments
所在的comment_groups
。CommentsGroup
CommentsGroup
。id
=CommentsSubGroup
。group_id
有猜到吗?还是我错了,应该使用$ hasMany关系?
谢谢。
答案 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