CakePHP Найти с HABTM, используя только таблицу соединений - PullRequest
1 голос
/ 22 февраля 2012

У меня есть модель цели, которая имеет пользователей HasAndBelongsToMany Этот HABTM называется Участником. Когда я пытаюсь найти всех участников цели, таблица соединения для этого HABTM не используется. Вот соответствующий код в целевой модели.

class Goal extends AppModel {
    var $hasAndBelongsToMany = array(
    'Participant' => array(
        'className' => 'User',
        'joinTable' => 'goal_participants',
        'foreignKey' => 'goal_id',
        'associationForeignKey' => 'user_id',
        'unique' => true,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'finderQuery' => '',
        'deleteQuery' => '',
        'insertQuery' => ''
    ));

    function getParticipantIDs($goalID) {
        $this->bindModel(array('hasOne' => array('Participant')));
        return $this->find('list', array(
            'fields' => array('Participant.user_id'),
            'conditions' => array('Participant.goal_id' => $goalID)
        ));
    }
}

Я связываю Участника как hasOne, чтобы он создал соединение в запросе, но я получаю следующую ошибку:

Warning (512): SQL Error: 1054: Unknown column 'Participant.user_id' in 'field list' [CORE\cake\libs\model\datasources\dbo_source.php, line 525]
Query: SELECT `Participant`.`id`, `Participant`.`user_id` FROM `users` AS `Participant`   WHERE `Participant`.`goal_id` = '19' AND `Participant`.`status` != 2

1 Ответ

1 голос
/ 23 февраля 2012

Я отредактировал ответ после комментария ОП.

Если я хорошо понимаю, что вы собираетесь делать, этот фрагмент кода может помочь:

function getParticipantIDs($goalID) {
    $participants = $this->GoalParticipant->find('list', array(
        'fields' => array('user_id'),
        'conditions' => array('goal_id' => $goalID)
    ));
    return array_values($participants);
} 

IЯ не уверен на 100% в правильности синтаксиса GoalParticipant.Я почти уверен, что если бы объединяющая таблица была названа goal_participants, правильный синтаксис был бы GoalsParticipant, но так как он назван goal_participants, я предполагаю, что это может быть GoalParticipant.

...