我有三个表,其关联如下: 列表有很多预订 列表hasmany special_prices
表:
预订 .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();
答案 0 :(得分:0)
预订已经绑定到模型中的上市了吗?那么就不需要动态使用bindModel。
只需将您的Booking.checkin BETWEEN $与AND $ from添加到$ conditions数组