2012-12-03 50 views
12

我在Laravel中通過POST進行基本記錄更新時遇到問題。Laravel更新語法 - 使用數組更新記錄

我已經捕獲了數組中的所有後期數據,並且如果現有Order#是0,那麼我創建了一個新記錄(正常工作)。否則,我更新現有記錄。

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); 
    } 
} 

更新:以上 的代碼是實際可行的。我有一個驗證錯誤,導致函數提前返回。

回答

17

而是這行:

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

你需要做的:

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

使用find()(等於where_id ())從數據庫中選擇特定的行,並使用更新來傳遞新數據。

+0

如果這工作正是我正在尋找的。這是否記錄在Laravel文檔中的任何位置?我徹底地看透了他們。這會返回一個布爾值嗎? – jamis0n

+0

Eloquent模型可以通過它的屬性進行調整。而且通過使用名爲Fluent的Laravel原生數據庫模型。這是在這裏的文檔mentoined:http://laravel.com/docs/database/fluent#update – markvaneijk

+0

原來'$ updateOrder = Order :: update($ thisOrderID,$ thisOrder);'工作得很好。我在驗證過程中出錯,這就是爲什麼我得到意想不到的返回結果。 – jamis0n

3

你覺得這是什麼:

//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

這個偉大的工程,直到你有幾個字段進行更新,然後讓這看起來繁瑣和多餘的,因爲更有耐力已經確定在數組中。我希望@MarkVanEijk上面有正確的答案。 – jamis0n

1

恩,我會建議這樣做,如果$ thisOrder包含密鑰,它只會更新記錄,否則它只會創建一個新記錄。

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

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

如果輸入::得到(「orderNo」)沒有價值將創建其他更新