Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [Laravel] Problema con eloquent e upsert

    ciao!

    premetto che ho sempre usato le stored procedure e mai in model in laravel.
    l'ultimo cliente, invece, vuole usare i model.
    con un db già creato.

    quindi io ho creato il model che dovrebbe rappresentare la struttura dell tabella:
    codice:
    namespace App\Models;
    
    
    use Illuminate\Database\Eloquent\Factories\HasFactory;
    use Illuminate\Database\Eloquent\Model;
    
    
    class Fornitori extends Model {
        protected $table = 'fornitori';
    
    
        const CREATED_AT = 'forn_data_aggiunta';
        const UPDATED_AT = 'forn_data_modifica';
    
    
        protected $primaryKey = 'forn_id';
    
    
        public $incrementing = true;
    
    
        protected $fillable = [
            'forn_id',
            'forn_codice',
            'forn_nome',
            'forn_data_aggiunta',
            'forn_data_modifica'
        ];
    
    
    }
    poi nel controller ho aggiunto questa funzione:
    codice:
    public function add(Request $req) {
        $data = $req->json()->all();
    
    
        if (!empty($data)) {
            try {
                $today = date("Y-m-d H:i:s");
    
    
                Fornitori::upsert(
                    [trim($data['forn_codice']), trim($data['forn_nome']), $today, $today],
                    ['forn_nome', $today],
                    ['forn_codice']
                );
    
    
            } catch (QueryException $ex) {
                return response()->json([
                    'res' => 'ko',
                    'message' => $ex->getMessage()
                ]);
            }
    
    
            return response()->json(array(
                "res" => "ok",
                "message" => 'Operazione avvenuta con successo!'
            ));
        } else {
            return response()->json(array(
                "res" => "ko",
                "message" => "Dati mancanti!"
            ));
        }
    }
    ma ottengo questo errore che proprio non capisco:
    codice:
    {
        "res": "ko",
        "message": "SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'field list' (SQL: insert into `fornitori` (`forn_data_aggiunta`, `forn_data_modifica`, `0`, `1`, `2`, `3`) values (2023-09-23 17:13:39, 2023-09-23 17:13:39, cod1, codice 1, 2023-09-23 17:13:39, 2023-09-23 17:13:39) on duplicate key update `forn_codice` = values(`forn_codice`), `forn_data_modifica` = values(`forn_data_modifica`))"
    }
    un aiuto??

  2. #2
    ok, un problema l'ho capito, e riguarda i timestamps che la tabella non ha.

    quindi ho modificato il model così:
    codice:
    namespace App\Models;
    
    
    use Illuminate\Database\Eloquent\Model;
    
    
    class Fornitori extends Model {
        protected $table = 'fornitori';
        public $timestamps = false;
        protected $primaryKey = 'forn_id';
        public $incrementing = true;
    
    
        protected $fillable = [
            'forn_id',
            'forn_codice',
            'forn_nome',
            'forn_data_aggiunta',
            'forn_data_modifica'
        ];
    
    
    }
    ma ottengo un altro errore:
    codice:
    {
        "res": "ko",
        "message": "SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'field list' (SQL: insert into `fornitori` (`0`, `1`, `2`, `3`) values (cod1, codice 1, 2023-09-23 17:15:11, 2023-09-23 17:15:11) on duplicate key update `forn_codice` = values(`forn_codice`))"
    }

  3. #3
    ok risolto!

    codice:
    public function add(Request $req) {
        $data = $req->json()->all();
    
    
        if (!empty($data)) {
            try {
                $today = date("Y-m-d H:i:s");
    
    
                Fornitori::upsert(
                    [
                        'forn_codice' => trim($data['forn_codice']),
                        'forn_nome' => trim($data['forn_nome']),
                        'forn_data_aggiunta' => $today,
                        'forn_data_modifica' => $today
                    ],
                    ['forn_codice'],
                    ['forn_nome', 'forn_data_modifica'],
                );
    
    
            } catch (QueryException $ex) {
                return response()->json([
                    'res' => 'ko',
                    'message' => $ex->getMessage()
                ]);
            }
    
    
            return response()->json(array(
                "res" => "ok",
                "message" => 'Operazione avvenuta con successo!'
            ));
        } else {
            return response()->json(array(
                "res" => "ko",
                "message" => "Dati mancanti!"
            ));
        }
    }

  4. #4
    Visto che aggiorni un solo record, perchè non usi il metodo updateOrCreate() la cui sintassi è molto più comprensibile?

  5. #5
    Quote Originariamente inviata da filippo.toso Visualizza il messaggio
    Visto che aggiorni un solo record, perchè non usi il metodo updateOrCreate() la cui sintassi è molto più comprensibile?
    eh non lo so in realtà
    me lo vado a vedere!
    grazie per la dritta!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.