Home > Net >  How can I update a column value given a where clause in Laravel?
How can I update a column value given a where clause in Laravel?

Time:08-29

I've tried doing:

 $uniquekey = '202208271120';
        $results2 =DB::table('tests')
        ->where('usuario_id', $usuario)
        ->where('id_evento_test', '0')
        
        ->update([ 'id_evento_test'=> $uniquekey]);
        return response()->json($results2, 201);

but when testing it in postman returned me 0.

enter image description here

Here's my code:

<?php

namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;

use Illuminate\Http\Request;

class ShowSummaryResultsController extends Controller
{
    public function show(Request $request)
    {
        $usuario = $request->input('usuario');

        $results = DB::table('tests')
        ->where('usuario_id', '=', $usuario)
        ->where('id_evento_test', '=', '0')
        ->get();

        $resultsOkPROTANOPIA = 0;
        $resultsNokPROTANOPIA = 0;
        $resultsOkDEUTERANOPIA = 0;
        $resultsNokDEUTERANOPIA = 0;
        $resultsOkTRITANOPIA = 0;
        $resultsNokTRITANOPIA = 0;
        
        foreach ($results as $rows)
        {
            $image_id = $rows->image_id;
            $resultado = $rows->resultado;
            //$tipo = DB::table('images')
            //->where('id', '=', $image_id)
            //->get();

            $image = 'App\Models\Image'::findOrFail($image_id);

            $tipo_discromatopsia = $image->tipo_discromatopsia;

            if ($tipo_discromatopsia == 'PROTANOPIA') { 
                if($resultado) { 
                    $resultsOkPROTANOPIA  =1;
                }else{ 
                    $resultsNokPROTANOPIA  =1;
                }
            }
            elseif ($tipo_discromatopsia == 'DEUTERANOPIA') { 
                if($resultado) { 
                    $resultsOkDEUTERANOPIA  =1;
                }else{ 
                    $resultsNokDEUTERANOPIA  =1;
                }    
            }
            else { 
                if($resultado) { 
                    $resultsOkTRITANOPIA  =1;
                }else{ 
                    $resultsNokTRITANOPIA  =1;
                }    
            }

            //update event_id with a unique key 
      
            //$uniquekey = 202208271116;
            //$results->id_evento_test = $uniquekey; 
            //$results->save(); 
        }
        $porc=0;
        if (($resultsOkPROTANOPIA   $resultsNokPROTANOPIA) >0) 
            { $porc=$resultsOkPROTANOPIA / ($resultsOkPROTANOPIA   $resultsNokPROTANOPIA ) * 100;  }
        $result[0] = array("tipo" =>'PROTANOPIA',"ResOK" =>$resultsOkPROTANOPIA,"ResNOK" =>$resultsNokPROTANOPIA,"Porc" =>$porc); 
        
        $porc=0;
        if (($resultsOkDEUTERANOPIA   $resultsNokDEUTERANOPIA ) >0) 
            {$porc=$resultsOkDEUTERANOPIA / ($resultsOkDEUTERANOPIA   $resultsNokDEUTERANOPIA ) * 100;}
        $result[1] = array("tipo" =>'DEUTERANOPIA',"ResOK" =>$resultsOkDEUTERANOPIA,"ResNOK" =>$resultsNokDEUTERANOPIA,"Porc" =>$porc); 

        $porc=0;
        if (($resultsOkTRITANOPIA   $resultsNokTRITANOPIA )>0) 
            {$porc=$resultsOkTRITANOPIA/ ($resultsOkTRITANOPIA   $resultsNokTRITANOPIA )* 100;}
        $result[2] = array("tipo" =>'TRITANOPIA',"ResOK" =>$resultsOkDEUTERANOPIA,"ResNOK" =>$resultsNokDEUTERANOPIA,"Porc" =>$porc); 

        $min = min($result[0]['Porc'],$result[1]['Porc'],$result[2]['Porc']);

        $result[3] = array("tipo" =>'RESULTADOS',"index"=>$min,"Tipo"=>$result[$min]['tipo'], ); 

        $uniquekey = '202208271120';
        $results2 =DB::table('tests')
        ->where('usuario_id', $usuario)
        ->where('id_evento_test', '0')
        
        ->update([ 'id_evento_test'=> $uniquekey]);
        return response()->json($results2, 201);
        //return response()->json($result, 201);


    }
}

CodePudding user response:

If you need value of column after successful updating then read this example please:

    $uniquekey = '202208271120';
try {
        DB::table('tests')
        ->where('usuario_id', $usuario)
        ->where('id_evento_test', 0)        
        ->update(['id_evento_test' => $uniquekey]);
        $results2 = $uniquekey;

        return response()->json($results2, 201);
} catch (\Illuminate\Database\QueryExeption $e) {
        return response()->json(['error' => 'Unsuccessful Update']);
}

You can use first or get to retrieve all the data from table test or only column id_evento_test. So $results2 could have all data or only part of data as you need.

CodePudding user response:

in this code $results2 =DB::table('tests') you are storing the result of the database query to $result2 which is 0 or 1 and 0 means that nothing was updated and 1 means that the update was done successfully.

if you want to return the $uniquekey then assign it to $result2:

$results2 = $uniquekey;
return response()->json($results2, 201);

or just return $uniquekey:

return response()->json($uniquekey, 201);
  • Related