【问题标题】:How to save multiple request parameters in laravel 5.2 ?如何在 laravel 5.2 中保存多个请求参数?
【发布时间】:2016-07-07 02:30:50
【问题描述】:

我现在正在学习 laravel。我有这个问题。我已将 2 个请求参数传递给我的控制器功能。第一个请求参数包含一个对象值,但我将其转换为序列化表单,因为将保存它的表的字段具有文本数据类型。第二个请求参数保存一个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'] 内部如下图所示

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

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

【问题讨论】:

    标签: php laravel-5.2


    【解决方案1】:

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

    所以你的 store 函数可能看起来像这样:

    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

    【讨论】:

      【解决方案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 了解更多信息。

      【讨论】:

        【解决方案3】:

        类似这样的:

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

        如果您想了解更多信息,请参阅doc

        【讨论】:

          猜你喜欢
          • 2016-07-16
          • 2016-12-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-29
          • 1970-01-01
          • 2016-11-12
          • 1970-01-01
          相关资源
          最近更新 更多