У меня есть таблицы ниже с ассоциациями HABTM.
user, group , groups_users
group , project, projects_groups
public $hasAndBelongsToMany = array(
'Group' =>
array(
'className' => 'Group',
'joinTable' => 'groups_users',
'foreignKey' => 'user_id',
'associationForeignKey' => 'group_id',
'unique' => 'keepExisting',
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => ''
)
);
Я пытаюсь получить всех пользователей в виде списка для флажков, которые находятся в проекте, используя идентификатор проекта, используя запрос ниже
$users = $this->User->Group->Project->find('list',
array(
'conditions' => array('Project.id' => $this->Session->read('Projectid'))
,'contain' => array(
'User' => array( 'fields' => 'User.id', 'User.email')
)
)
);
Но ошибка ниже
Модель «Проект» не связана с моделью «Пользователь»
На самом деле я пробовал разные способы заставить это работать, но я не могу понять, как это правильно, как я могу добиться того, чего я хочу. ура
Я достиг того, что хотел с помощью объединений, есть ли способ сделать это с помощью сопоставления моделей вместо опции ручного объединения?
$options['joins'] = array(
array('table' => 'groups_users',
'alias' => 'gu',
'type' => 'LEFT',
'conditions' => array(
'gu.user_id = User.id',
)
),
array('table' => 'projectGroups',
'alias' => 'pg',
'type' => 'LEFT',
'conditions' => array(
'pg.group_id = gu.group_id',
)
)
);
$this->User->recursive = -1;
$options['conditions'] = array(
'pg.project_id = ' => $this->Session->read('Projectid'),
'User.Active = ' => true
);
$users = $this->User->find('list', $options);
Других решений пока нет …