我有三个表,它们具有如下关联:
列表有很多预订
列表有很多special_prices

表格:

bookings.id,bookings.start,bookings.stop,bookings.listing_id

special_prices.id,special_prices.start,special_prices.stop,special_prices.price,special_prices.listing_id,

当然还有清单表。

关联均由蛋糕烘烤在模型文件中建立。用户可以根据区域,开始日期和结束日期搜索所有列表。我正在尝试获取一组结果,如果它们的开始日期不在该列表可能具有的任何预订日期之间,则仅返回列表。

在我的搜索功能中,我有:

$conditions = array(
"AND" => array(
    "OR" => array(
                "Listing.address_one LIKE" => "%".$area."%",
                "Listing.address_two LIKE" => "%".$area."%",
                "Listing.city LIKE" => "%".$area."%",
                "Listing.postcode LIKE" => "%".$area."%",
                "Listing.title LIKE" => "%".$area."%",
                ),
                )
            );

$this->Listing->bindModel(array('hasMany' => array('Booking' => array('conditions' =>array('Booking.checkin BETWEEN ? AND ?' => array($to, $from))))));
$data = $this->paginate('Listing', $conditions);
$this->set('data', $data);


我在这里阅读:http://ibndawood.com/2011/10/how-to-filter-hasmany-related-model-records-in-cakephp-when-using-find-function/另一个选择是使用

$this->Listing->hasMany['Booking']['conditions'] = array('Booking.checkin BETWEEN ? AND ?' => array($to, $from));


但是不幸的是,这两个方法都只返回数据库中与该区域匹配的所有条目,但似乎完全忽略了Bookings表。我试着做条件

'Booking.id' => '5'


要测试,但它也忽略了这一点。

谁能为我阐明一下。文档中没有太多示例,其中的内容对我不起作用。

编辑

我已经设法找出原因,因为在进行分页时cakephp不会自动加入hasmany关系,因此我必须添加一些代码来告诉它加入预订表。

现在,它似乎可以与Bookings表联接,但它返回了多组清单。任何人都可以看看并帮助我吗?这是我现在所拥有的:

$conditions = array(
                            "OR" => array(
                                "Listing.address_one LIKE" => "%".$area."%",
                                "Listing.address_two LIKE" => "%".$area."%",
                                "Listing.city LIKE" => "%".$area."%",
                                "Listing.postcode LIKE" => "%".$area."%",
                                "Listing.title LIKE" => "%".$area."%",
                            )
                        );


    $this->paginate = array(
               'joins'=>array(
                          array(
                           'table'=>'bookings',
                           'alias'=>'Booking',
                           'type' =>'inner',
                           'conditions' =>array('Booking.checkin NOT BETWEEN ? AND ?' => array($to, $from))
                          )
                        ),
                'conditions'=> $conditions
                );

    $data = $this->paginate();

最佳答案

预订已经绑定到模型中的列表了吗?那么就不需要即时使用bindModel了。

只需将$ to和$ from之间的Booking.checkin添加到$ conditions数组中

10-07 14:00