CakePHP 1.3 ассоциации - PullRequest
       17

CakePHP 1.3 ассоциации

0 голосов
/ 13 июля 2010

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

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

Я установил ассоциации в моделях.

Я пытаюсь вернуть сводную страницу для тех, кто вошел в систему, с отображением имени проекта, состояние проекта отфильтровано вошедшей в систему 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'))))

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

Неизвестный столбец 'User.id' в 'предложении where'

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

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

он корректно возвращает все проекты, связанные с user_id, но теперь я больше не возвращаю значение status, только идентификатор.

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"? Я уверен, что упускаю что-то очевидное здесь.

Ответы [ 2 ]

0 голосов
/ 14 июля 2010

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

$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 голосов
/ 13 июля 2010

, которая возвращает ошибку - Неизвестный столбец 'User.id' в 'где предложение'

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

...