提问者:小点点

cakephp有许多查询问题


我有三个表,它们有如下关联:房源有许多预订房源有许多特价

桌子:

bookings.idbookings.startbookings.stopbookings.listing_id

特价。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));

但不幸的是,这两个只是返回数据库中与该区域匹配的所有条目,但似乎完全忽略了预订表。我试过把条件

'Booking.id' => '5'

但它也忽略了这一点。

有人能帮我解释一下吗。在文档中没有太多的例子,而且其中的内容对我不起作用。

编辑

我已经设法发现,因为cakephp在分页时不会自动加入,所以我必须添加一些代码来告诉它加入bookings表。

现在它似乎加入了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();

共1个答案

匿名用户

预订已绑定在模型中列出,对吗?那么就不需要动态使用bindModel了。

只需添加您的预订。在$to和$from之间签入$conditions数组