计算培训时间

时间:2019-09-17 22:15:13

标签: laravel laravel-5

我对type_training , training & payment这3张桌子有些犹豫。

在表type_training中,我有一个名为price的字段,其中包含4个数量:例如:

1小时00 = 100 欧元

1小时30 = 150 欧元

2小时00 = 200 欧元

2小时30 = 250 欧元

在我的页面培训中,我为同一位学生录制了2张录音。

enter image description here

学生Dujardin3 hours预订了300 euros

以我的形式Payment,是否可以提取300的金额?

enter image description here

那么,在我的模型Payment中?我必须计算hour starthour end之间的差吗?

我不知道该怎么办?

然后,在我的示例中检索了时差之后,我们得到了3 hours。 如何对我的Total字段中的2个记录求和?我试过了吗?

$typetraining = Typetraining::find($request->fk_typetraining);
$data = $request->all(); 
$data['total'] = $typetraining->price + $request->????;
Payment::create($data);

总结:

1)如何获取hour starthour end之间的差异,

2)如何通过培训持续时间计算金额?

有关信息,这是我的体系结构。

enter image description here

感谢您的帮助和解释。

编辑:沃特卡姆扬19/09/2019

我自适应了吗?

createFromFormat('H:i', $request->get('hour_start'))

每个:

<div class="form-group{{ $errors->has('hour_start') ? 'has-error' : '' }}">
<label for="form-group-input-1">Hour start</label>
<input type="text" name="hour_start" id="hour_start" class="form-control" required="required" value="{{ old('hour_start')}}"/>
{!! $errors->first('hour_start', '<span class="help-block">:message</span>') !!}
</div>

然后,在我的模型培训中,我收到了以下错误消息:未定义的变量:typeseances

$start = Carbon::parse($request->get('hour_start'));
$end= Carbon::parse($request->get('hour_end'));

$mins = $end->diffInMinutes($start, true);
$hoursTraining = $mins/60;

$total = $**typeTraining**->price * $hoursTraining;

我有类似的错误消息:未定义的变量:typeseances

2 个答案:

答案 0 :(得分:1)

我建议以下内容:

  1. 在培训表中添加“价格”字段。这样,如果将来您增加该价格,则所有历史记录都将保持当前价格。
  2. 保存“培训”后,继续使用Carbon库计算两个日期之间的小时数,并使用此值从TypeTraining表中选择当前价格。
  3. 将值存储在“训练”表上,然后您可以轻松地从任何地方计算总和。

答案 1 :(得分:1)

我认为,正如乔·加林德(JoeGalind)所说的那样,您应该认真考虑重新设计架构以使其更简单。实际上,必须调用只需要价格的 TypeTraining 对象,实际上应该将其移动到 Training 对象。但是,让我来介绍一种使用您现有的代码来解决它的方法。

首先,正如您所说,您需要获取所请求培训的小时数。不幸的是,您需要部分时间而非全部时间来更改价格。如果您需要整个小时,这很容易,您可以使用Carbon方法diffInHours()。但是我们可以使用diffInMinutes()来完成,然后计算出不完整的小时数。

首先,我们需要将表单中的小时数解析为Carbon对象:

$start = Carbon::parse($request->get('hour_start'));
$end= Carbon::parse($request->get('hour_end'));

注意,我不知道它是如何从您的表单中传入的。如果上述方法不起作用,则可能需要以不同的方式解析它。像这样:

createFromFormat('H:i', $request->get('hour_start'))

createFromFormat('H:i:s', $request->get('hour_start'))

现在您有了一个碳物体,我们需要计算出差异,包括工时。同样,我们将使用分钟数并计算部分小时数:

$mins = $end->diffInMinutes($start, true);
$hoursTraining = $mins/60;

这将产生乘数(培训时数),例如2.0或2.5或2.25,等等。从这里开始,如果您有一个小时的基本价格(这就是我期望的 TypeTraining 模型的price字段),很容易:

$total = $typeTraining->price * $hoursTraining;

根据您的代码设置方式,最困难的部分是您必须拉 TypeTraining Training ,以便了解价格(再次-只需在培训上付出代价,使生活更轻松)。

要获取价格,类似这样:

$training = Training::with('typeTraining')->where('fk_student', $request->get('fk_student)->first();
$price = $training->typeTraining->price;

现在您已经可以插入上面的公式了。

这肯定不正确。而用FK对学生进行培训可能不是您想要的。如果是常规培训,或者有其他一些标识符,请使用该标识符拉动培训以获取价格。但是您可以稍后再决定。我只能猜测其中的一部分,因为我不知道会发生什么,或者您的查询需要什么,或者您的关系,但这应该可以给您一个思路。最重要的是,您要询问如何计算总数,以上已作进一步回答。