Laravel更新语法 - 使用数组更新记录

时间:2012-12-03 14:44:21

标签: post laravel laravel-routing

我在Laravel中通过POST进行基本记录更新时遇到了麻烦。

我已捕获数组中的所有帖子数据,如果现有的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);
    }
}

更新: 上面的代码实际上工作。我有一个验证错误,导致函数提前返回。

3 个答案:

答案 0 :(得分:20)

而不是这一行:

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

你需要这样做:

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

使用find()(等于where_id()),您可以从数据库中选择一个特定的行,并通过更新传递新数据。

答案 1 :(得分: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();
    }
}

答案 2 :(得分:1)

嗯,我建议这样做,如果$ thisOrder包含密钥,它只会更新记录,否则只会创建一条新记录。

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

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

如果Input :: get('orderNo')没有值将创建其他更新