2012-12-03 14 views
12

Ich habe Probleme, eine grundlegende Datensatzaktualisierung per POST in Laravel durchzuführen.Laravel Aktualisierungssyntax - Datensatz mit Array aktualisieren

Ich habe alle Post-Daten in einem Array erfasst, und wenn die vorhandene Bestellnummer 0 ist, dann erstelle ich einen neuen Datensatz (funktioniert gut). Ansonsten aktualisiere ich den bestehenden Datensatz.

order.php

class Order extends Eloquent { 
    public static $table = 'my_orders'; 
} 

routes.php

//Handle a new order POST 
Route::post('order', array('do' => function() { 
    $thisOrder = array(
     'qty' => Input::get('quantity'), 
     'desc' => Input::get('description'), 
    ); 

    $thisOrderID = Input::get('orderNo'); 

    //CHECK FOR NEW OR EXISTING ORDER 
    if($thisOrderID > 0) { 
     //THIS FUNCTION SOMEHOW RETURNS THE FUNCTION CALL AND DOESNT CONTINUE PAST 
     //AND THE RECORD IS NOT UPDATED 
     $updateOrder = Order::update($thisOrderID, $thisOrder); 
    } 
} 

Update: Der obige Code in der Tat Arbeit. Ich hatte einen Validierungsfehler, der dazu führte, dass die Funktion vorzeitig zurückkehrte.

Antwort

17

Anstelle dieser Linie:

$updateOrder = Order::update($thisOrderID, $thisOrder); 

Sie tun müssen:

$updateOrder = Order::find($thisOrderID)->update($thisOrder); 

Mit find() (die gleich where_id()) Sie wählen eine bestimmte Zeile aus der Datenbank und mit update übergeben Sie die neuen Daten.

+0

Wenn das funktioniert, ist genau das, was ich suche. Ist das irgendwo in den Laravel-Dokumenten dokumentiert? Ich habe sie gründlich durchgesehen. Wird dies einen booleschen Wert zurückgeben? – jamis0n

+0

Ein redegewandtes Modell kann durch seine Eigenschaften angepasst werden. Aber auch mit Laravels nativem Datenbankmodell Fluent. Es ist in den Dokumenten hier erwähnt: http://laravel.com/docs/database/fluent#update – markvaneijk

+0

Stellt $ updateOrder = Order :: update ($ thisOrderID, $ thisOrder); 'funktioniert gut. Ich hatte einen Fehler in meiner Validierung, weshalb ich unerwartete Ergebnisse erhalten habe. – jamis0n

3

Was denken Sie daran:

//Handle a new order POST 
Route::post('order', array('do' => function() { 
    $thisOrder = array(
     'qty' => Input::get('quantity'), 
     'desc' => Input::get('description'), 
    ); 

    $thisOrderID = Input::get('orderNo'); 

    $order = Order::find($thisOrderID); 

    //CHECK FOR NEW OR EXISTING ORDER 
    if($order) { 
     $order->title = 'New order title'; 
     $order->desc = 'New description'; 
     $order->save(); 
    } 
} 
+0

Dies funktioniert gut, bis Sie mehrere Felder zu aktualisieren, die dann diese mühsam und überflüssig macht den Anschein, als theyre bereits definiert im Array. Ich hoffe @MarkVanEijk hat die richtige Antwort oben. – jamis0n

1

erm, ich werde vorschlagen, es auf diese Weise zu tun, wenn $ thisOrder den Schlüssel enthalten, wird es nur den Datensatz aktualisieren, sonst wird es nur einen neuen Datensatz erstellen.

$thisOrder = array(
    'orderNo' => Input::get('orderNo'), 
    'qty' => Input::get('quantity'), 
    'desc' => Input::get('description'), 
); 

$updateOrder = Order::save($thisOrder); 

wenn Eingang :: get (‚OrderNo‘) wird kein Wert anderes Update erstellen werden

Verwandte Themen