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

Posted

技术标签:

【中文标题】Laravel 更新语法 - 使用数组更新记录【英文标题】:Laravel Update Syntax - Updating Record with Array 【发布时间】:2012-11-21 01:22:12 【问题描述】:

我在 Laravel 中通过 POST 进行基本记录更新时遇到问题。

我已经在一个数组中捕获了所有的帖子数据,如果现有的 Order# 为 0,那么我创建一个新记录(工作正常)。否则我更新现有记录。

订单.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】:

你怎么看:

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

【讨论】:

这很有效,直到您有几个字段要更新,这使得这看起来很乏味和多余,因为它们已经在数组中定义了。我希望@MarkVanEijk 上面有正确的答案。【参考方案2】:

代替这一行:

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

你需要做的:

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

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

【讨论】:

如果这正是我想要的。这是否记录在 Laravel 文档的任何地方?我非常彻底地浏览了它们。这会返回一个布尔值吗? 一个 Eloquent 模型可以通过它的属性来调整。但也可以通过使用 Laravel 的名为 Fluent 的本机数据库模型。它在此处的文档中被提及:laravel.com/docs/database/fluent#update 原来$updateOrder = Order::update($thisOrderID, $thisOrder); 工作得很好。我的验证出现错误,这就是我得到意外返回结果的原因。【参考方案3】:

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

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

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

如果 Input::get('orderNo') 不会创建任何值,否则更新

【讨论】:

以上是关于Laravel 更新语法 - 使用数组更新记录的主要内容,如果未能解决你的问题,请参考以下文章

使用 foreach 更新 Laravel 错误:语法错误,意外 ' ' (T_STRING),期待 ']'

Laravel 为啥不使用 vuejs 更新记录

Laravel 5 使用中的问题记录(持续更新)

Laravel 使用可选图像更新记录

Laravel 更新密码通过验证但不更新记录

使用 laravel 查询生成器更新记录排名