Прямо сейчас у меня есть это: Группы Внутри групп у нас есть подгруппы Внутри подгрупп есть комментарии
Подгруппы относятся к группам 1, 2, 3; подгруппа table имеют поле 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 Неизвестный столбец "КомментарииSubGroup.group_id" в разделе "where"
SQL Query: SELECT
CommentsGroup
.id
,CommentsGroup
.name
FROMbotobot_comments
.comment_groups
ASCommentsGroup
ГДЕ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