2012-12-03 3 views
12

У меня возникли проблемы с базовым обновлением записи через POST в Laravel.Синтаксис обновления 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); 
    } 
} 

Update: Код выше делает на самом деле работы. У меня была ошибка проверки, которая заставляла функцию возвращаться раньше.

ответ

17

Вместо этой линии:

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

Вы должны сделать:

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

С находкой() (которая равна where_id()) вы выбираете определенную строку из базы данных и с обновлением передаете новые данные.

+0

Если это работает именно то, что я ищу. Является ли это документально зарегистрированным в документах Laravel? Я просмотрел их довольно тщательно. Будет ли это возвращать логическое значение? – jamis0n

+0

Модель Eloquent может быть отрегулирована по своим свойствам. Но также с использованием собственной модели базы данных Laravel под названием Fluent. Это описано в документах: 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); 

если Input :: получить («OrderNo») никакого значения не будет создавать еще обновление

Смежные вопросы