[英]Laravel Eloquent date range between range
我正在建立一个拥有订票机制的网站。 如果房间可用,用户可以预订X天的酒店房间。
我在用:
在以下情况下,该房间不可用:
如果有3个表来存储这些数据:
我正在努力建立一个雄辩的查询来检查房间是否可用,然后再处理用户付款。 这是我现在拥有的:
public function isAvailableAtDates($rentalId, $startDate, $endDate, $capacity) {
$from = min($startDate, $endDate);
$till = max($startDate, $endDate);
$result = DB::table('rentals')
->where([
['rentals.rentalId', '=', $rentalId],
['rentals.rentalCapacity', '>=', $capacity]
])
->whereNotIn('rentals.rentalId', function($query) use ($from, $till, $rentalId) {
$query->select('unavailabilities.rentalId')
->from('unavailabilities')
->where([
['unavailabilities.rentalId', '=', $rentalId],
['unavailabilityStartDate', '>=', $from],
['unavailabilityEndDate', '<=', $till],
]);
})
->whereNotIn('rentals.rentalId', function($query) use ($from, $till, $rentalId) {
$query->select('rent.rentalId')
->from('rent')
->where([
['rent.rentalId', '=', $rentalId],
['rentStartDate', '>=', $from],
['rentEndDate', '<=', $till]
]);
})
->select('rentals.rentalId')
->get();
return count($result) == 1;
}
假设我在“不可用”中有一行:
当调用该方法的日期超出“不可用”中存储的范围时,我得到了预期的结果。 当用完全相同的日期调用它时,我没有任何结果(这就是我想要的)。 到现在为止还挺好! 问题是,如果我用4月26日到30日之间的开始日期和5月下旬的结束日期来调用它,即使我不应该仍然得到结果。
有人可以帮我吗?
尝试这个:
->whereNotIn('rentals.rentalId', function($query) use ($from, $till, $rentalId) {
$query->select('unavailabilities.rentalId')
->from('unavailabilities')
->where([
['unavailabilities.rentalId', '=', $rentalId],
['unavailabilityStartDate', '<=', $till],
['unavailabilityEndDate', '>=', $from],
]);
})
->whereNotIn('rentals.rentalId', function($query) use ($from, $till, $rentalId) {
$query->select('rent.rentalId')
->from('rent')
->where([
['rent.rentalId', '=', $rentalId],
['rentStartDate', '<=', $till],
['rentEndDate', '>=', $from]
]);
})
您需要所有在$ till之前已开始但在$ from日期之前尚未结束的租金和不可用记录。
尝试绘制时间图。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.