Ankündigung

Einklappen
Keine Ankündigung bisher.

updateOrCreate funktioniert nicht wie erwartet

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Laravel] updateOrCreate funktioniert nicht wie erwartet

    Hallo,

    mit folgenden Code versuche ich ein Datensatz anzulegen / zu überschreiben:
    PHP-Code:
    ...
                
    VehicleInsurance::updateOrCreate(
                    [
    'id_vehicle' => $idVehicle'id_insurance' => $idInsurance],
                    [
                        
    'contract_number' => $contractNumber,
                        
    'id_insurance_partner' => isset($current['id_insurance_partner']) ? (int) $current['id_insurance_partner'] : null,
                        
    'vat_inclusive' => isset($current['vat_inclusive']) ? (int) $current['vat_inclusive'] : 1,
                        
    'amount' => $amount,
                        
    'id_payment_interval' => $idPaymentInterval,
                        
    'date_first_payment' => $dateFirstPayment,
                        
    'id_payment_form' => $idPaymentForm,
                        
    'id_editor' => $this->idEditor,
                    ]
                );
    ... 
    Der Datensatz existiert nicht, also soll er angelegt werden.
    Laut Handbuch soll genau das mit der Methode updateOrCreate() gehen. Aber SQL gibt eine Fehlermeldung aus:
    Code:
    [2019-10-30 15:41:45] test.ERROR: SQLSTATE[HY000]: General error: 1364 Field 'id_vehicle' doesn't have a default value (SQL: insert into `vehicle_insurances` (`contract_number`, `id_insurance_partner`, `vat_inclusive`, `amount`, `id_payment_interval`, `date_first_payment`, `id_payment_form`, `id_editor`) values (?, ?, 1, 0, ?, ?, ?, 1))
    ...
    Die id_vehicle ist vorhanden.

    Was ich nicht verstehe ist der Query:
    Code:
    insert into `vehicle_insurances` (`contract_number`, `id_insurance_partner`, `vat_inclusive`, `amount`, `id_payment_interval`, `date_first_payment`, `id_payment_form`, `id_editor`) values (?, ?, 1, 0, ?, ?, ?, 1)
    Eigentllich erwarte ich bei Insert
    Code:
    insert into `vehicle_insurances` (`id_vehicle`, `id_insurance`, `contract_number`, `id_insurance_partner`, `vat_inclusive`, `amount`, `id_payment_interval`, `date_first_payment`, `id_payment_form`, `id_editor`) values (?, ?, ?, ?, 1, 0, ?, ?, ?, 1)
    Zumindest verstehe ich so die Doku (Auszug):
    PHP-Code:
    // If there's a flight from Oakland to San Diego, set the price to $99.
    // If no matching model exists, create one.
       
    $flight App\Flight::updateOrCreate(     ['departure' => 'Oakland''destination' => 'San Diego'],     ['price' => 99'discounted' => 1] ); 
    Warum wird der Insert-Query nur "verstümmelt" gebildelt?


  • #2
    Zeig mal dein Tabellen Schema (Table Create Code)

    Kommentar


    • #3
      Zitat von Zeichen32 Beitrag anzeigen
      Zeig mal dein Tabellen Schema (Table Create Code)
      Hat sich erledigt, im Model musste ich noch die Variable $fillable erweitern
      PHP-Code:
      <?php

      namespace App\Models;

      use 
      Illuminate\Database\Eloquent\Model;

      class 
      VehicleInsurance extends Model {
          public 
      $timestamps false;
          protected 
      $primaryKey 'ID';

          protected 
      $fillable = [
              
      'id_vehicle',
              
      'id_insurance',
              
      'contract_number',
              
      'id_insurance_partner',
              
      'vat_inclusive',
              
      'amount',
              
      'id_payment_interval',
              
      'date_first_payment',
              
      'id_payment_form',
              
      'id_editor',
              
      '__created',
          ];
      }
      Danke

      Kommentar

      Lädt...
      X