cakephp检查多个表

时间:2011-10-12 18:44:19

标签: cakephp

我从条件数据库中获取了一个Rate信息列表。但是,如果日期范围中包含日期,我希望添加另一个最小停留条件,并且另一个表格称为最小停留时间。如果日期在我通过的日期范围内,那么费率表已经有一分钟的停留时间,但在某些日期我想过度使用。

我是cakephp的新手,所以我不确定如何检查minStay表中日期范围内的日期。然后获取最大的minStay并将其添加到条件中。

Rate表中的默认minStay为1

这是minStay表中的数据:

日期:31-10-2011 rateID:21 minStay:2 日期:2011年11月1日rateID:21 minStay: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 个答案:

答案 0 :(得分:1)

我想我明白你想做什么,如果没有请发表评论。

要做到这一点你需要做这样的事情(假设你有像许多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));

我认为会这样做,希望它适合你