CakePhp 2.5 $ принадлежит двум моделям

0

Прямо сейчас у меня есть это: Группы Внутри групп у нас есть подгруппы Внутри подгрупп есть комментарии

Подгруппы относятся к группам 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 FROM botobot_comments. comment_groups AS CommentsGroup ГДЕ CommentsGroup. id= CommentsSubGroup. group_id

Любая догадка? Или я ошибаюсь, и я должен использовать отношения $ hasMany?

Благодарю.

Теги:
cakephp
cakephp-2.5

1 ответ

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

  • 0
    У меня все еще та же ошибка. И если мы проверим ошибку, в запросе пропущены один псевдоним и левое соединение. Чего-то еще где-то не хватает ...: S
  • 0
    Вероятно, это связано с тем, что ваши модели не соблюдают надлежащее соглашение об именах - смотрите мой обновленный ответ.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню