Нужна помощь с hasAndBelongsToMany (HABTM) Cakephp найти - PullRequest
2 голосов
/ 16 сентября 2010

Я пытаюсь запросить отношение hasAndBelongsToMany в Cakephp 1.3, но похоже, что выполняемый SQL-запрос не выполняет объединение таблицы «многие ко многим».

У меня есть таблица пользователей, таблица проектов и таблица users_projects. Я хочу получить список всех проектов, с которыми связан пользователь, в отдельном контроллере Allocations.

Я читаю книгу CakePHP на тему: http://book.cakephp.org/view/1044/hasAndBelongsToMany-HABTM

Итак, я пытался это:

var_dump($this->Allocation->User->Project->find('list',array('conditions'=>array('Project.user_id'=>'21'))));

Однако, это не работает, ничего не возвращает и эта ошибка:

Warning (512): SQL Error: 1054: Unknown column 'Projects.user_id' in 'where clause' [CORE/cake/libs/model/datasources/dbo_source.php, line 681]

Query: SELECT `Project`.`id`, `Project`.`name` FROM `projects` AS `Project` WHERE `Projects`.`user_id` = '21' 

Похоже, что CakePHP не выполняет требуемого соединения.

Это в моих проектах модель:

var $hasAndBelongsToMany = array(
    'User' => array(
        'className' => 'User',
        'joinTable' => 'users_projects',
        'foreignKey' => 'project_id',
        'associationForeignKey' => 'user_id',
        'unique' => true,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'finderQuery' => '',
        'deleteQuery' => '',
        'insertQuery' => ''
    )

А это в моей модели пользователей:

var $hasAndBelongsToMany = array(
    'Project' => array(
        'className' => 'Project',
        'joinTable' => 'users_projects',
        'foreignKey' => 'user_id',
        'associationForeignKey' => 'project_id',
        'unique' => true,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'finderQuery' => '',
        'deleteQuery' => '',
        'insertQuery' => ''
    )

Итак, каков правильный синтаксис для получения списка проектов для данного пользователя в отношениях «многие ко многим» в cakephp?

Ответы [ 2 ]

2 голосов
/ 17 сентября 2010

Возможно, это из-за того, что вы не сделали имена двух таблиц соединенными в алфавитном порядке. users_projects должно быть projects_users.

0 голосов
/ 16 сентября 2010

Вы получаете эту ошибку, потому что вы используете тип поиска ' list '. По умолчанию Cake выбирает поля ID и NAME при использовании этого типа поиска.

Измените тип поиска на «все», чтобы получить ожидаемые результаты:

var_dump($this->Allocation->User->Project->find('list',array('conditions'=>array('Project.user_id'=>'21'))));

...