首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >核实在Laravel进行的培训付款和最高限额

核实在Laravel进行的培训付款和最高限额
EN

Stack Overflow用户
提问于 2019-10-04 19:42:11
回答 1查看 99关注 0票数 0

我的目标是,当我为一个payment的学生编码时。他(学生)可以跟随2 trainings 每一支付。(这是最高限额-1付款=2次培训)

在我的表单Payment中,我编码了一个学生,例如Menier

这个学生有权接受两次培训(这是上限)。

以我的形式培训:我为学生Menier编写了2个培训代码。

我的第一个问题:我怎么能把训练的次数减少两个呢?

(因此,如果我编码另一个训练,它必须阻止!)

我的第二个问题,如果我编码2支付相同的学生。该学生有权接受4次培训。如何创建这类算法?

这是我现在的密码,我知道不是很多.

编辑05-10-2019年-控制器培训

代码语言:javascript
复制
public function store(Request $request)
{
    $request->validate([
            'date_seance' => 'required',
            'hour_start' => 'required',
            'hour_end' => 'required',
            'fk_motorbike' => 'required',
            'fk_former' => 'required',
            'fk_student' => 'required',
            'fk_typeseance' => 'required'


    ]);


   $date_seance = $request->get('date_seance'); 
   $hour_start = $request->get('hour_start'); 
   $hour_end = $request->get('hour_end'); 
   $fk_motorbike = $request->get('fk_motorbike');
   $fk_student = $request->get('fk_student');
   $fk_former = $request->get('fk_former');
   $fk_typeseance = $request->get('fk_typeseance');


   $payments = Payment::where('fk_student', $request->get('fk_student'))->first();


    if(!isset($payments)){ 
        return redirect()->route('trainings.index')
                ->with('error', 'No payment, no training! ');
    }

    $thisStudentsTrainings = Training::where('fk_student', $fk_student)->get();


    if(count($thisStudentsTrainings) >= 2){ 
        return redirect()->route('trainings.index')
            ->with('error', 'The ceiling is 2 trainings! ');
    }

    $thisStudentsPayments = Payment::where('fk_student', $request->get('fk_student'))->get();


    if( (count($thisStudentsPayments) * 2) < count($thisStudentsTrainings)   ) {
         return redirect()->route('trainings.index')
                ->with('error', 'test!');
    }


    else{
        Training::create($request->all());
            return redirect()->route('trainings.index')
                ->with('success', 'Add');
    }



}

你知道我怎样才能解决我的问题吗?我还是个拉拉的初学者。

For Watercayman

谢谢您抽时间见我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-04 22:24:29

这也不算太糟。由于支付并不直接与特定的培训(即您有一个信用系统),您可以很容易地通过几个查询做到这一点。

我的第一个问题:我怎样才能把训练的次数减少两个呢?

从基础开始,并在数据库中找到该学生的培训数量:

代码语言:javascript
复制
$thisStudentsTrainings = Training::where('fk_student', $fk_student)->get();

或者,您可以从相反的位置进入这个简单的查询:

代码语言:javascript
复制
$student = Student::with('trainings')->get();
$thisStudentsTrainings = $student->trainings;

然后,限制两次培训(不计报酬):

代码语言:javascript
复制
if(count($thisStudentsTrainings) >= 2){ too many trainings }

现在,您已经有了培训的数量,如果您还想确保系统中有支付,那么让我们获得这些费用:

代码语言:javascript
复制
$thisStudentsPayments = Payment::where('fk_student', $request->get('fk_student'))->get();

要检查他们是否为培训支付了费用,您现在有了需要的两部分数据。你只需弄清楚他们是否支付了正确的培训金额,根据2支付=1次培训。所以:

代码语言:javascript
复制
if( (count($thisStudentsPayments) * 2) < count($thisStudentsTrainings) ) {
    // They have not made enough payments!
}

我的第二个问题,如果我编码2支付给同一个学生。该学生有权接受4次培训。如何创建这类算法?

以上将适用于2或4或任何你想要的。

现在,如果你想执行最多2次每次支付培训,我们也可以检查这一点。但是,这开始在逻辑上变得有点复杂或循环。如果你能避免这种情况,那就容易多了。但是,让我们检查一下每次付款最多2次,也就是在上面的一次之后加一个相等的支票:

代码语言:javascript
复制
 if( (count($thisStudentsTrainings) >= count($thisStudentsPayments) * 2) {
    // They are at their limit of trainings based on their payments!
    // Note we include >= so that if they have purchased 2 trainings, 
    // this blocks them from a 3rd until they pay again.
}

这应该能解决你的问题。然而,你没有问,但我想你不希望一个学生允许培训,如果他们已经用完了一笔钱。如果他们接受了训练,并且“花光了自己的信用”,就不应该允许他们参加培训。如果这对你来说很重要,我建议在你的程序的另一部分中,当一笔付款被消耗时,你写到数据库。因此-如果学生使用了2次培训,并且已经支付了这些培训费用,那么可能是 payment model spent上的一个字段(或者表明支付不再有效的东西)。如果不需要历史数据,也可以从系统中删除付款。但是,假设您使用了$payment->spent,您仍然可以执行上面的算法,只需将用过的行添加到查询中,如下所示:

代码语言:javascript
复制
 $student = Student::with(['trainings' => function($query){
    $query->where('spent', 0)
 }])->get();

那么剩下的都应该是一样的。这不是剪切和粘贴,但我认为,既然你已经分开付款和培训,这应该是一个很容易解决的解决办法,基于以上的理解。:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58242345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档