web-dev-qa-db-ja.com

Laravel構文を更新-配列でレコードを更新

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

更新:上記のコードは実際に機能します。検証エラーが発生したため、関数が早く戻りました。

15
jamis0n

この行の代わりに:

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

あなたがする必要があります:

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

Find()(where_id()と同じ)を使用して、データベースから特定の行を選択し、updateを使用して新しいデータを渡します。

21
markvaneijk

これについてどう思いますか:

//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();
    }
}
3
ceesvanegmond

erm、私はこのようにすることをお勧めします。$ thisOrderにキーが含まれている場合は、レコードを更新するだけです。それ以外の場合は、新しいレコードを作成します。

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

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

if Input :: get( 'orderNo')値が作成されない場合は更新されます

1
Knight