Cakephp 3-';匹配';-如何过滤预订系统的数据?
我有Cakephp 3-';匹配';-如何过滤预订系统的数据?,cakephp,associations,filtering,query-builder,cakephp-3.x,Cakephp,Associations,Filtering,Query Builder,Cakephp 3.x,我有“住宿单元”和“住宿预订”表,我想检查一段时间内住宿单元的可用性。例如,到达日期:2019-08-20,离开日期:2019-08-27 住宿单位表如下所示: “住宿预订”表如下所示: 此代码不起作用: $this->loadModel('AccommodUnits'); $this->conditionBookings = [ 'NOT' => [ [ 'AccommodBookings.date_
“住宿单元”
和“住宿预订”
表,我想检查一段时间内住宿单元的可用性。例如,到达日期:2019-08-20,离开日期:2019-08-27
住宿单位表如下所示:
“住宿预订”表如下所示:
此代码不起作用:
$this->loadModel('AccommodUnits');
$this->conditionBookings = [
'NOT' => [
[
'AccommodBookings.date_start >=' => '2019-08-20',
'AccommodBookings.date_end <=' => '2019-08-27'
],
]
];
$accommodUnits = $this->AccommodUnits
->find('all')
->distinct(['AccommodUnits.id'])
->contain([
'AccommodBookings' => function ($q) {
return $q->where($this->conditionBookings);
},
])
->where($conditionUnits)
->matching('AccommodBookings', function ($q) {
return $q->where($this->conditionBookings);
});
如何解决这个问题?很简单,您必须重叠预订期
[
'AccommodBookings.date_start <=' => '2019-08-27', // Here put end date greater than start date <=
'AccommodBookings.date_end >=' => '2019-08-20' // Here put start date smaller than end date >=
],
上面的示例将找到所有未使用
word枯燥乏味
波兹
[
'AccommodBookings.date_start <=' => '2019-08-27', // Here put end date greater than start date <=
'AccommodBookings.date_end >=' => '2019-08-20' // Here put start date smaller than end date >=
],
$this->loadModel('AccommodUnits');
$accommodBookings = [
'AccommodBookings.date_start <=' => '2019-08-27', // not match start date lower than end date
'AccommodBookings.date_end >=' => '2019-08-20' // not mach end date greater than start date
];
$accommodUnits = $this->AccommodUnits
->find() // if empty default is 'all'
->where(['AccommodUnits.id' => 124]) // find units 124 where not matching:
->notMatching('AccommodBookings', function ($q) use ($accommodBookings) {
return $q->where($accommodBookings);
});
// In a controller or table method.
$query = $articlesTable
->find()
->notMatching('Tags', function ($q) {
return $q->where(['Tags.name' => 'boring']);
});