如何使用 laravel 5.8 在控制器中创建条件?

Posted

技术标签:

【中文标题】如何使用 laravel 5.8 在控制器中创建条件?【英文标题】:how to make a condition in the controller with laravel 5.8? 【发布时间】:2019-07-22 19:51:47 【问题描述】:

你好朋友我有这个问题...我有表奖,users_profile..我在哪里保留图像,描述和分数 所以在我的控制器中,我想要做的是以下......如果用户有必要的积分来领取这个奖品,那么他就会认领它,如果他没有足够的积分,那么他会显示一条错误消息

public function reclamarpremios(Request $request)

    $vago_puntos = request('vago_puntos');
    $premioID = request('id');
    $puntaje = request('puntaje');
    $perfil_users_app_id = request('perfil_users_app_id');
    $us = UserAppPerfil::where('id',$perfil_users_app_id);
    $reclamo = Premios::where('id',$premioID)->where('puntos','=',$vago_puntos);
    if(!$reclamo->exists())
    
        $us->decrement('vago_puntos',$puntaje);
        $reclamo->increment('veces_reclamado');
        return response()->json([$us,$reclamo,'message' => 'Felicidades has reclamado esta promocion, el equipo de vagos estara en contacto con tigo para obtorgarte tu premio'],200);

    else
        return response()->json(['message'=>'No tienes los suficientes vagos puntos'],422);  
    


这段代码只工作了一半,因为例如,如果用户有 1000 积分,而奖品价值 500 积分,那么他不会交换它(他将我发送到 else)......如果我想要的是在里面某些字段添加和减去某些值,除了显示消息 这是我在 mysql 数据库中的表

【问题讨论】:

所以,我不明白:'如果用户有 1000 积分,而奖品价值 500 积分,那么他不会交换它'。如果用户积分足够,应该可以领取奖品吧?是这个问题吗? 是的,这就是问题 你为什么要否认这一点: if( ! $reclamo->exists() ) ... ?因为这个,你要去 else 子句 另外:$reclamo 变量的返回值是多少?我认为你应该检查一下。做一个 dd($reclamo);看看返回了什么 我这样说(我正在测试),因为如果我让它正常 if ($ reclama-> count ()> 0) ... 代码反过来工作(如果一份礼物价值 500 分,而用户有 200 分,则可以兑换)所以用 if (! $ claim-> count ()> 0) 解决...(我知道这样做是错误的) 【参考方案1】:

我无法理解这一行中的第二个条件(->where('puntos','=',$vago_puntos)):

$reclamo = Premios::where('id',$premioID)->where('puntos','=',$vago_puntos);

用户想要兑换的奖品是id等于$premioID的奖品,不是吗?如果是这样,你就不需要那个条件了。

public function reclamarpremios(Request $request)

    $vago_puntos = request('vago_puntos');

    $premioID = request('id');  //The prize id
    $puntaje = request('puntaje');
    $perfil_users_app_id = request('perfil_users_app_id');
    $us = UserAppPerfil::where('id',$perfil_users_app_id)->first();

    //Get the prize the user wants to redeem:
    $reclamo = Premios::where('id',$premioID)->first();
    if ($reclamo != null)  // if the prize exists
        $requiredPoints = $reclamo->puntos; //The required amount of points for that prize
        $userPoints = $us->puntos; //The user available points
        if ($userPoints >= $requiredPoints) 
            // if the user has the required amount of points, can redeem the prize:
            $us->decrement('vago_puntos',$puntaje);
            $reclamo->increment('veces_reclamado');
            return response()->json([$us,$reclamo,'message' => 'Felicidades has reclamado esta promocion, el equipo de vagos estara en contacto con tigo para obtorgarte tu premio'],200);
        
        else 
            return response()->json(['message'=>'No tienes los suficientes vagos puntos'],422);
        
    else
           return response()->json(['message' => 'This prize is not available']);
    

希望对你有帮助。

【讨论】:

听从你的建议,给我这个错误Property [vago_puntos] does not exist on the Eloquent builder instance. 我通过添加 -> firsts(); 解决了这个问题在查询中...但我仍然遇到与以前的代码相同的错误:( ..即使我有 100 分,用户也可以领取 500 分的奖励【参考方案2】:

朋友尝试了很多次,所以解决了

public function reclamarpremios(Request $request)

    $vago_puntos = request('vago_puntos');
    $premioID = request('id');
    $perfil_users_app_id = request('perfil_users_app_id');
    $us = UserAppPerfil::where('id',$perfil_users_app_id)->first();
    if($reclamo = Premios::where('id',$premioID)->where('puntos','<=',$us->vago_puntos)->first())
    
        $us->decrement('vago_puntos',$reclamo->puntos);
        $us->increment('premios_ganados');
        $reclamo->increment('veces_reclamado');
        return response()->json([$reclamo,$us,'message'=>'Felicidades has reclamado esta promocion, el equipo de vagos estara en contacto con tigo para obtorgarte tu premio'],200);
    else
        return response()->json(['message'=>'No tienes los suficientes vagos puntos'],422);
    


我只是有点怀疑......这是否意味着 >= 更大且相等,这是否意味着 = ...发生在我身上的是,虽然我丁字裤200分并且奖金价值500,但我可以领取它,如果我有超过500,那么我不能这样做如果我离开它

【讨论】:

以上是关于如何使用 laravel 5.8 在控制器中创建条件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 5.8 中附加授权标头

如何使用 Laravel 5.8 将散列密码存储到数据库中

如何在关系表laravel 5.8中解码Json数据

Laravel 5.8 多张图片上传

在Laravel 5.8中无法上传图片?

无法在 laravel 5.8 中上传图片