2014-12-05 3 views
1

У меня есть таблицы ниже с ассоциациями HABTM.HABTM Cake php find

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') 
        ) 
      ) 
     ); 

Но ошибки ниже

модель " Проект "не связан с моделью" Пользователь "

Я действительно пробовал разные способы получить эту работу, но, похоже, не могут понять, как я могу достичь того, чего хочу. cheers

+0

Это может быть сделано только с объединением поиска соединений в руководстве по тортам –

+0

не сдерживается? – tsukimi

+0

$ users = $ this-> User-> Group-> Project-> find ('list', array ( 'conditions' => array ('Project.id' => $ this-> Session-> read ('Projectid')) , 'содержать' => массив ( Группа => массив ('Пользователь' => массив ('поля' => 'User.id', 'User.email')) )) ); – AnNaMaLaI

ответ

0

Я достиг чего я хотел с объединениями, есть ли способ сделать это, используя ассоциации моделей, а не вариант ручных объединений?

$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);