2012-12-03 3 views
12

Laravel에서 POST를 통해 기본 레코드 업데이트를 수행하는 데 문제가 있습니다.Laravel 업데이트 구문 - 배열로 레코드 업데이트

배열의 모든 게시물 데이터를 캡처했으며 기존 주문 번호가 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); 

() (어떤이 where_id 동일()) 데이터베이스에서 특정 행을 선택하고 업데이트하면 새 데이터가 전달됩니다.

+0

이것이 내가 원하는 것을 정확하게 작동한다면. 이 문서가 Laravel 문서의 어느 곳에 나 문서화되어 있습니까? 나는 그들을 철저히 들여다 보았다. 이것이 부울을 반환할까요? – jamis0n

+0

Eloquent 모델은 속성에 따라 조정할 수 있습니다. 또한 Fluent라는 Laravel의 기본 데이터베이스 모델을 사용합니다. 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

당신이 theyre를 이미 정의 된 다음이 지루하고 중복 보인다하게 업데이트하는 여러 필드를 때까지이 좋은 작품 배열에. @MarkVanEijk이 올바른 답을 얻길 바란다. – jamis0n

1

erm이 방법으로 제안합니다. $ thisOrder에 키가 포함되어 있으면 레코드를 업데이트 할 것이고, 그렇지 않으면 그냥 새로운 레코드를 만들 것입니다.

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

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

입력 : ('orderNo') 값이 다른 업데이 트를 생성되지 않습니다를 얻을 경우