现在我有这个:
团体
内部组中有子组
在小组内部,我们有评论
子组属于组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
AS CommentsGroup
在哪里CommentsGroup
。id
= CommentsSubGroup
。group_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/