【发布时间】:2016-02-12 01:24:36
【问题描述】:
我目前正在使用 PHP (Laravel 5) 开发一个预订系统,但我不知道如何构建一个基于时间的定价系统来计算重叠的总价。预订存储在以下字段中
Reservations (Table)
begindate_time (DateTime)
enddate_time (DateTime)
price (decimal(10,2))
我有一个价格表来查找输入开始时间和结束时间的价格,如下所示:
Prices (Table)
id (INT)
price (decimal(10,2))
begin_time (time)
end_time (time)
dayOfTheWeeks (varchar(255))
begin_time/end_time 可以在 00:00:00 到 23:59:59 之间变化,而 dayOfTheWeeks 是一个包含日期的字符串,例如星期一、星期二、星期三。我知道每个字段应该只有一个值,但我懒得在一周的几天里制作一张完整的表格。
比您有一个链接到一个预订的活动,该预订根据该活动链接到 price_activity 表的时间具有不同的价格,因为价格可以有不同的活动
activity_price (Table)
id
activity_id (INT)
price_id (INT)
我尝试像这样获取每个活动和日期的价格,然后我将它们排序并尝试循环它们并减去价格的结束时间减去预订的开始时间。这是我想出的,但它不起作用......
foreach($activity->prices()->orderBy('begin_time','asc')->get() as $price){
$whichDayArray = explode(',',$price->dayOfTheWeeks);
if(in_array($dayToday,$whichDayArray)){
$prices = array();
if(strtotime($price->end_time) > strtotime($input['begintime']) && strtotime($price->begin_time) < strtotime($input['endtime'])){
$prices[] = array('id' => $price->id,'price' => $price->price,'beginTimePrice' => $price->begin_time, 'endTimePrice' => $price->end_time);
}
}
}
这是很多代码,我的价格现在与我的预订重叠,但是我如何计算预订在价格中的时间量。我认为它可以比上面的更容易和更好。
【问题讨论】:
-
您是否真的尝试过任何方法来解决问题,或者您只是期待一个解决方案而无需您付出任何努力?
-
@Bogdan 我更新了我的帖子!
-
一种方法是构建一个静态表,其中包含每个小时和每个工作日(24 x 7 行)并加入其中,对与每个价格连接的行进行分组和计数(在哪一天/小时与每个价格匹配) 以确定每个价格适用的小时数。
-
@Michael-sqlbot 感谢您的评论!然而,时间不仅可以是整小时,也可以是半小时或一刻钟,甚至允许几分钟!所以问题仍然存在,您必须计算您的预订在那个小时内的分钟数,或者您必须在一天中的每一分钟插入一个表格。
标签: php mysql sql laravel laravel-5