Когда я работал над своим текущим проектом, я столкнулся с довольно сложной проблемой. Я укажу мою проблему гораздо более подробно прямо сейчас:
Существует три модели : 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?
Спасибо большое, что нашли время, чтобы прочитать это и помочь мне!