CakePHP проверить несколько таблиц - PullRequest
0 голосов
/ 12 октября 2011

Я получаю список информации о ставках из базы данных с условиями. Однако я хотел бы добавить еще одно условие минимального пребывания, если диапазон дат содержит дату и rateID из другой таблицы, называемой минимальным пребыванием. Таблица тарифов уже имеет минимальное пребывание, но в определенные даты я хочу переопределить это, если дата попадает в диапазон дат, который я передаю.

Я новичок в cakephp, поэтому не уверен, как проверить таблицу minStay на наличие дат в диапазоне дат. Затем получите самый большой minStay и добавьте его к условию.

Значение minStay по умолчанию в таблице тарифов равно 1

Вот данные в таблице minStay:

дата: 31-10-2011 ставка ID: 21 мин. Время пребывания: 2 дата: 1-11-2011 ставка ID: 21 мин. время пребывания: 3

Результаты: Если диапазон дат от 31-10-2011 до 2-11-2011 / 2 ночи, то результатов нет. Если 3 ночи и более, то результат.

Надеюсь, я правильно объяснил.

Переменная, содержащая диапазон дат: $ todays

        $conditions = array(
                'Rate.enabled'=>1,'Rate.is_corporate'=>$is_corporate, 'Rate.minimum_stay <='=>$days, 
                'Rate.valid_from < '=>$date_start,'Rate.valid_to >'=>$date_end,
                'OR'=>array('Rate.maximum_stay'=>0,'Rate.maximum_stay >='=>$days)
        );

        $order = 'Rate.list_no';
        $this->Rate->contain('Room.id','Room.title','Room.max_adults','Room.max_children');
        $rates = $this->Rate->find('all',array('conditions'=>$conditions,'order'=>$order));

1 Ответ

1 голос
/ 14 октября 2011

Я думаю, что понял, что вы хотите сделать, если нет, пожалуйста, прокомментируйте.

Для этого вам нужно сделать что-то вроде этого (при условии, что у вас есть что-то вроде, есть много MinStay)

    $conditions = array(
            'Rate.enabled'=>1,'Rate.is_corporate'=>$is_corporate, 'Rate.minimum_stay <='=>$days, 
            'Rate.valid_from < '=>$date_start,'Rate.valid_to >'=>$date_end,
            'OR'=>array('Rate.maximum_stay'=>0,'Rate.maximum_stay >='=>$days),
            'AND' => array('OR'=> array('minStay.date BETWEEN ? AND ?' => array($date_start,$date_end)),
                 'minStay.minimum_stay <' =>$days )
    );

    $order = 'Rate.list_no';
    $fields = array ('Room.id','Room.title','Room.max_adults','Room.max_children');
    $rates = $this->Rate->find('all',array('conditions'=>$conditions,'order'=>$order, 'fields'=> $fields));

Я думаю, что это сработает, надеюсь, у вас это получится

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...