2010-07-12 1 views
0

Я начал писать проект, используя CakePHP (1.3), и мне трудно вернуть результаты, используя стиль запроса CakePHP.CakePHP 1.3 ассоциации

Проект является трекером проблем. Пока у меня есть только следующие таблицы: «пользователи», «проекты» и «таблицы ссылок», так как любые пользователи могут быть связаны с одним или несколькими проектами. Существует также таблица «статусы», связанная с таблицей проектов.

Я создал ассоциации в моделях.

Я пытаюсь вернуть итоговую страницу для тех, кто вошел в систему, отображая имя проекта, статус проекта, отфильтрованный зарегистрированным в user_id. Если бы я сделал это в SQL, тогда я сделал бы что-то вроде следующего.

SELECT 
    `statuses`.name, 
    `projects`.name 
FROM 
    `statuses` 
    INNER JOIN `projects` ON (`statuses`.id = `projects`.status_id) 
    INNER JOIN `projects_users` ON (`projects`.id = `projects_users`.project_id) 
    INNER JOIN `users` ON (`projects_users`.user_id = `users`.id) 
WHERE 
    `users`.id = 1 

$this->Project->find('all')) возвращает все проектов, подробности о состоянии и пользователей.

Array 
    (
     [0] => Array 
      (
       [Project] => Array 
        (
         [id] => 1 
         [name] => Project 1 
         [status_id] => 2 
         [date_created] => 0000-00-00 
        ) 

       [Status] => Array 
        (
         [id] => 2 
         [name] => Live 
        ) 
       [User] => Array 
        (
         [0] => Array 
          (
           [id] => 1 
           [username] => d 
           [password] => ******************************** 
           [role] => master 
           [ProjectsUser] => Array 
            (
             [id] => 1 
             [project_id] => 1 
             [user_id] => 1 
            ) 
          ) 
        ) 
      ) 

Etc.. 

Я также попытался

$this->Project->find('all', array('conditions'=>array('User.id' => $this->Session->read('Auth.User.id')))) 

который возвращает ошибку:

Unknown column 'User.id' in 'where clause'

Если я пытаюсь

$this->Project->User->find('all', array('conditions'=>array('User.id' => $this->Session->read('Auth.User.id')))) 

он правильно возвращает все проекты, связанные с user_id, но теперь я уже не г заменяя значение статуса, только id.

Array 
(
    [0] => Array 
     (
      [User] => Array 
       (
        [id] => 1 
        [username] => d 
        [password] => ******************************** 
        [role] => master 
       ) 

      [Project] => Array 
       (
        [0] => Array 
         (
          [id] => 1 
          [name] => Project 1 
          [status_id] => 2 
          [date_created] => 0000-00-00 
          [ProjectsUser] => Array 
           (
            [id] => 1 
            [project_id] => 1 
            [user_id] => 1 
           ) 
         ) 
        [1] => Array 
         (
          [id] => 3 
          [name] => Project 3 
          [status_id] => 1 
          [date_created] => 0000-00-00 
          [ProjectsUser] => Array 
           (
            [id] => 2 
            [project_id] => 3 
            [user_id] => 1 
           ) 
         ) 
       ) 
     ) 
) 

Есть ли способ легко вернуть то, что я после «CakePHP»? Я уверен, что я пропустил что-то очевидное здесь.

ответ

0

which returns an error - Unknown column 'User.id' in 'where clause'

Ваше имя таблицы users. Множественное число. Вы передали ему что-то не users.

+0

$ this-> Project-> find ('all', array ('conditions' => array ('Users.id' => $ this-> Session-> read ('Auth. User.id ')))) все еще дает ошибку. Я считаю, что торт требует «пользователя», а не пользователя, потому что я фильтрую одного пользователя. Другой запрос, который имеет «пользователь», также работает? – Dave

0

Вы хотите что-то вроде этого:

$this->Project->User->find(
    'all', 
    array(
     'conditions' => array(
      'User.id' => $this->Session->read('Auth.User.id') 
     ), 
     'contain' => array(
      'Project' => array(
       'Status' 
      ) 
     ) 
    ) 
); 

я мог бы иметь ваши отношения не так, но это должно сделать трюк. Это containable, что вы хотите. containable - это основная библиотека, но она не будет объединена. Если вы действительно хотите присоединиться, есть способ, который можно найти в Google.

+0

Спасибо за образец кода. К сожалению, он возвращает точно так же, как мой второй пример i.e status_id, а не статус. Для ясности таблица Projects имеет FK status_id – Dave

+0

, тогда у вас должен быть «array» => array ('Status.id'), определенный в вашем отношении. вы можете расширить это до состояния 'Status' => array ('fields' => array ('Status.id', 'Status.name ')) @peter, не могли бы вы прекратить редактировать мои сообщения ktx – dogmatic69

+0

У меня нет' fields '=> array (' Status.id '), но я думал, что это означает, что все поля будут возвращены по умолчанию. Расширение «статуса» не имело никакого значения. Я проверил и проверил мои модели, и все остальное работает так, как я ожидал бы, но не это. – Dave