php
  • laravel
  • eloquent
  • 2017-09-05 4 views 0 likes 
    0

    Ich habe in ein ziemlich obskures Problem geraten, in dem die "update" -Abfrage meines Eloquent-Modells nicht mehr funktioniert.Eloquent Modell "UPDATE" Abfrage fehlgeschlagen

    hier ist der Query Builder:

    $os = OrderShipment::where('order_id', '=', $shipment->orderReferenceNumber)->update(array("api_shipment_id" => $data->shipmentId)); 
    

    diese Abfrage innerhalb eines IF ist und so wird nur ausgeführt, wenn $ shipment-> orderReferenceNumber einen Wert hat - was es tut. Diese Aktualisierungsabfrage gibt immer eine falsche/0 aktualisierte Zeile zurück.

    Innenseite des OrderShipment Modell ich habe:

    protected $fillable = [ 
         'api_shipment_id', 
         'order_id', 
         'shipping_method_id' 
    ]; 
    

    so dass der Wert aktualisierbar ist und innerhalb des "befüllbaren" Array. ich habe auch dafür gesorgt, dass ich eine select-aussage mit der 'order-id' verwenden kann und die daten danach finde - aber auch dort keine würfel. Die Abfrage funktioniert gut, wenn ich es aus einer MySQL-Konsole heraus mache, also bin ich gerade hier festgefahren.

    +0

    Wenn nichts geändert wird, gibt es false/0 zurück, weil keine Zeilen geändert wurden. – user3158900

    +0

    die Sache finde ich merkwürdig daran, dass die Abfrage gut funktioniert, wenn ich keine Variable einfüge und einfach eine statische Variable übergebe, wie z. B. die manuelle Eingabe von '1979' anstelle von '$ sende-> orderReferenceNumber' - aber ich weiß, dass $ sende-> orderReferenceNumber definiert und eingestellt ist, so stopft mich das gerade aus. – lilrobot

    +0

    Ist es definiert und festgelegt, und anders als das, was bereits da war? Der Schlüssel ist, dass es anders sein muss als das, was bereits festgelegt ist, oder MySQL meldet, dass keine Zeilen geändert wurden, obwohl die Abfrage selbst gültig und erfolgreich war. – user3158900

    Antwort

    0

    testen Lösungen:

    Für Einzel Update:

    $os = OrderShipment::where('order_id', $shipment->orderReferenceNumber) 
    $os->api_shipment_id = $data->shipmentId; 
    $os->update(); 
    

    Für Masse Updates:

    OrderShipment::where('order_id', $shipment->orderReferenceNumber) 
        ->update(["api_shipment_id" => $data->shipmentId]); 
    

    Mehr Infos über update

    1

    ich denke unten Code kann Ihnen helfen.

    $os = OrderShipment::where('order_id', $shipment->orderReferenceNumber)->update([ "api_shipment_id" => $data->shipmentId ]); 
    
    Verwandte Themen