cakephp: использование объединения для результатов поиска - PullRequest
0 голосов
/ 31 декабря 2010

Я полностью запутался.

У меня есть три таблицы: applicants, applicants_qualifications и qualifications.

В представлении индекса для заявителей у меня есть форма с раскрывающимся списком квалификаций. Результатом должен быть список соискателей с такой квалификацией.

Итак, мне нужно, чтобы таблица кандидатов в представлении индекса основывалась на соединении, верно?

Если я добавлю это в мой Applicants_controller:

$options['joins'] = array(  
    array(  
        'table' => 'applicants_qualifications',  
        'alias' => 'q',  
        'type' => 'left outer', // so that I get applicants with no qualifications too   
        'conditions' => array('Applicant.id = q.applicant_id',)  
    )  
);
$this->Applicant->find('all', $options);

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

Я думаю, что эта строка:

$this->set('applicants', $this->paginate());

вызывает оператор sql без объединения.

Похоже, мне нужно объединить опции join $ с вызовом paginate. Это правильно?

Если я использую форму поиска, я получаю: Неизвестный столбец 'Qualifications.qualification_id' в 'предложении where'

Так что страница, очевидно, еще не "использует" мой sql с объединением.

Извините, я все еще новичок. Любая помощь приветствуется ...

Ответы [ 2 ]

1 голос
/ 31 декабря 2010

Чтобы установить conditions, joins и т. Д. Для нумерации страниц вашей модели, вы должны сделать это следующим образом:

function admin_index() {
    $this->Applicant->recursive = 0;
    $this->paginate = array(
        'Applicant' => array(
            // 'conditions' => array('Applicant.approved' => true),
            'joins' => array(
                array(
                    'table' => 'applicants_qualifications',  
                    'alias' => 'ApplicationsQualification',  
                    'type' => 'left outer',
                    'conditions' => array('Applicant.id = ApplicationsQualification.applicant_id')  
                )
            )
            // 'order' => array('Applicant.joined DESC')
        )
    );
    $this->set('applicants', $this->paginate());
}

Я закомментировал некоторые примеры ключей, которые вы можете включить позжена - просто чтобы дать вам представление о том, как это работает.

Надеюсь, что это помогает!

0 голосов
/ 31 декабря 2010

Вы можете использовать внутреннее соединение вместо левого внешнего соединения. Например,

в контроллере курсов

$cond =   array(
            array(
                'table' => 'colleges',
                'alias' => 'Colleges',
                'type' => 'inner',

                'conditions'=> array('Colleges.college_id = Courses.college_id')
            )

            ) ;


        $courses = $this->Courses->find('all',  
            array('joins' =>$cond,'conditions' => array("Courses.status ='1' AND Colleges.status='1' "),
                    'order'=>array('course_name'),
                    'fields' => array('course_id','course_name'),'group'=>'Courses.course_id'
                )
          );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...