CakePHP / Croogo: Ассоциация вееристого комплекса - PullRequest
1 голос
/ 22 сентября 2011

Когда я работал над своим текущим проектом, я столкнулся с довольно сложной проблемой. Я укажу мою проблему гораздо более подробно прямо сейчас:

Существует три модели : User, UsersExtendedField и UsersExtended.

UsersExtendedField содержит настраиваемые поля, которыми можно управлять вручную. Все настраиваемые поля также могут отображаться в представлении «Пользователи» и могут быть заполнены, конечно. Значения затем сохраняются в UsersExtended, который имеет два foreignKeys: user_id и field_id.

Отношения выглядят следующим образом : пользователь имеет много пользователей, расширенное поле, пользователь имеет расширенное поле, имеет много пользователей, расширенный, пользователь принадлежит пользователю, пользователь имеет расширенное поле.

Проблема : При доступе к представлению «Пользователи» отображается форма с вводом информации о пользователе. Любые UsersExtendedFields также доступны, и, поскольку эти hasMany UsersExtended, у них есть много значений UsersExtended. Но я хочу уменьшить их до тех значений, которые принадлежат Пользователю, чье представление отображается в данный момент. Вот мои (желанные) отношения:

Croogo::hookBehavior('User', 'Crooboard.ExtendedUser', array(
'relationship' => array(
    'hasMany' => array(
        'UsersExtendedField' => array(
            'className' => 'Crooboard.UsersExtendedField',
            'foreignKey' => '',
            'conditions' => array('status' => 1)
            ),
        ),
    ),
));

class UsersExtendedField extends AppModel {
var $name = 'UsersExtendedField';
var $displayField = 'fieldname';

var $hasMany = array(
    'UsersExtended' => array(
        'className' => 'Crooboard.UsersExtended',
        'foreignKey' => 'field_id',
                    'conditions' => array(
                           'UsersExtended.user_id = User.id'
                    )
    ),
);

}

Это не полный код, это важные части. Проблема начинается именно там, где я написал «UsersExtended.user_id = User.id». Очевидно, это не сработает. Но я не знаю, как получить доступ к User.id здесь. Я также не мог представить структуру HABTM для решения этой задачи. У вас есть идеи, как заставить работать семантику этого UsersExtended.user_id = User.id?

Спасибо большое, что нашли время, чтобы прочитать это и помочь мне!

1 Ответ

0 голосов
/ 13 марта 2012

Похоже, вам нужно правильно настроить отношения HABTM.

У вас уже есть таблица соединений UsersExtended, которая содержит ваши внешние ключи.Удалите все предыдущие отношения и настройте HABTM в каждой из ваших моделей User и UserExtendedField.

Код отношения в вашей модели User будет выглядеть следующим образом:

var $hasAndBelongsToMany = array(
                              'UsersExtended' => array(
                                  'className' => 'UsersExtended',
                                  'joinTable' => 'UsersExtended',    //assuming this is the
                                                                     //name of that model's table
                                  'foreignKey' => 'user_id',
                                  'associationForeignKey' => 'field_id'                             
                              )
                          );

Для получения дополнительной информации см. страница в книге CakePHP

Кроме того, это сообщение в блоге помогло мне понять концепции отношений, когда я изучал CakePHP.

...