Присоединяется в Cake PHP - PullRequest
0 голосов
/ 09 марта 2012

В моем приложении 2 модели, связанные с отношением hasMany.Модель Класс имеет много сеансов , и занятия могут проводиться в нескольких городах, а также могут быть опубликованы или не опубликованы.Информация о городе (city_id) хранится в таблице классов, однако время классов хранится в таблице сеансов, поскольку у класса может быть много сеансов.

Теперь я хочу перечислить все классы, которые

  • active
  • происходит в определенном городе
  • время начала занятий> NOW

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

            $options['joins'] = array(
                array(
                    'table' => 'sessions',
                    'alias' => 'Session',
                    'type' => 'left',
                    'conditions' => array(
                            'Class.city_id' => $this->data['Class']['city_id'],
                            'Class.state' => 'active',
                            'Session.start >= ' => date('Y-m-d H:i:s'),
                            'Class.id' => 'Session.class_id'
                        )
                )
            );
            $classes = $this->Class->find('all', $options);

Этот код возвращает все классы из всех городов, хотя это имело место в прошлом.Может ли кто-нибудь помочь мне, чтобы он возвращал правильные классы в соответствии с критериями, упомянутыми выше.

Ответы [ 2 ]

0 голосов
/ 09 марта 2012

изменить

'Session.start >= ' => date('Y-m-d H:i:s'),

на

'Session.start >= "'.date('Y-m-d H:i:s').'"',
0 голосов
/ 09 марта 2012

Скорее всего, вы хотите правое соединение, а не левое (имеется в виду, что сеанс и класс должны существовать). Попробуйте следующее:

$options['joins'] = array(
    array(
        'table' => 'sessions',
        'alias' => 'Session',
        'type' => 'right',
        'conditions' => array(
            'Session.start >= ' => "'".date('Y-m-d H:i:s')."'",
            'Class.id' => 'Session.class_id'
        )
    )
);
$options['conditions'] = array(
    'Class.city_id' => $this->data['Class']['city_id'],
    'Class.state' => 'active'
);

$classes = $this->Class->find('all', $options);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...