Синтаксис обновления Laravel - обновление записи с помощью массива
У меня возникли проблемы с базовым обновлением записи через POST в 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);
}
}
Обновление:
Приведенный выше код действительно работает. У меня была ошибка проверки, которая заставляла функцию возвращаться раньше.
Ответы
Ответ 1
Вместо этой строки:
$updateOrder = Order::update($thisOrderID, $thisOrder);
Вам нужно сделать:
$updateOrder = Order::find($thisOrderID)->update($thisOrder);
С помощью find() (который равен where_id()) вы выбираете определенную строку из базы данных, а при обновлении вы передаете новые данные.
Ответ 2
Что вы думаете об этом:
//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
erm, я предлагаю сделать это таким образом, если $thisOrder включает ключ, он просто обновит запись, иначе он просто создаст новую запись.
$thisOrder = array(
'orderNo' => Input::get('orderNo'),
'qty' => Input::get('quantity'),
'desc' => Input::get('description'),
);
$updateOrder = Order::save($thisOrder);
если Input:: get ('orderNo'), никакое значение не будет создано еще обновление