如何在laravel 5.2中保存多个请求参数?

时间:2016-03-20 16:42:45

标签: php laravel-5.2

我现在正在学习laravel。我有这个问题。我已经将2个请求参数传递给我的控制器功能。第一个请求参数包含一个对象值,但我将其转换为序列化形式,因为我将保存它的表的字段具有text数据类型。第二个请求参数包含overall_total计算值,并且它具有float数据类型字段。我的问题是,我如何将它存储在我的数据库中?我试图使用create函数,但它返回一个错误。有些论坛不太清楚。我还想不通。有人可以帮我这个吗?这是我的代码。

功能商店

public function store(Request $request){

       $serialize_po = serialize($request['purchase_orders']);
       $overall_total = $request['overall_total'];
       $purchase_orders_save = PurchaseOrder::create(?);

}

如何使用create保存2个参数?还是有其他方法可以保存它吗?

$request['purchase_orders']内部如下图所示

enter image description here

$request['overall_total']内部只是一个数字。例如。 310

我的数据库表结构如下所示

enter image description here

3 个答案:

答案 0 :(得分:2)

Laravel中的create()函数接受一个关联数组,其中数组键是列的名称,数组值是列的对应值。

所以你的商店功能可能如下所示:

public function store(Request $request){
    $serialize_po = serialize($request['purchase_orders']);
    $overall_total = $request['overall_total'];
    $purchase_orders_save = PurchaseOrder::create([
        'purchase_orders' => $serialize_po,
        'overall_total' => $overall_total
    ]);
}

另外需要注意的是,作为安全预防措施,Laravel不允许以这种方式填充模型的属性。您需要使用$fillable属性在模型中列出允许通过传入关联数组来填充哪些键。如果你没有,你可能会得到MassAssignmentException

因此,在您的模型中,您可能需要至少具备以下内容:

class PurchaseOrder extends Model
{
    protected $fillable = ['purchase_orders', 'overall_total'];
}

有更多选项和方法可以做到这一点,但这是基本和典型的情况。

有关使用create()方法和处理质量分配的更多信息,请参阅文档:https://laravel.com/docs/5.2/eloquent#mass-assignment

答案 1 :(得分:2)

考虑到您的型号名称是PurchaseOrder,您首先需要创建它的新实例。然后,使用save方法。

public function store(Request $request)
{
    $purchaseOrder = new PurchaseOrder;
    $purchaseOrder->overall_total = $request['overall_total'];
    $purchaseOrder->purchase_orders = serialize($request['purchase_orders']);
    $purchaseOrder->save();
}

有关详细信息,请参阅https://laravel.com/docs/5.2/eloquent#basic-inserts

答案 2 :(得分:1)

这样的事情:

DB::table('purchaseOrder')->insert(
    ['purchase_orders' =>  $serialize_po,'overall_total' => $overall_total]
);

如果您想了解更多内容,请参阅doc