【问题标题】:Mass Assignment Insert in Eloquent批量分配插入 Eloquent
【发布时间】:2015-11-03 11:47:03
【问题描述】:

在 Laravel 5.1 中,我对插入使用质量分配。但我想学习如何使用 Eloquent 批量插入。

我需要在订单流程中插入已售出的产品。

这是我要插入的数据。

   foreach($cart['fields'] as $key => $product)
    {
        $orderDetailData[] = [
            'order_id'       => $orderData['order_id'],
            'product_id'     => $product['id'],
            'quantity'       => $product['total_quantity'],
            'price'          => floatval($product['wholesale_price']),
            'vat'            => $product['vat'],
            'vat_value'      => floatval($product['vat_value']),
            'discount_ratio' => $product['discount_ratio'],
            'discount'       => floatval($product['discount_value']),
            'total_amount'   => floatval($product['total_amount']),
        ];
    }

这是我的插入代码

(new OrderDetail)->create($orderDetailData);

我认为这种方法不支持批量插入。

在 Laravel 5.1 Manuel 中我看到了这个。

DB::table('table')->insert($orderDetailData);

批量插入的批量分配应该怎么做?我应该使用前一个(数据库外观)

因为我收到此代码的错误(500 内部服务器错误)

(new OrderDetail)->create($orderDetailData);

【问题讨论】:

  • 500 internal server error 的错误是什么?
  • 当您手动设置字段时,为什么会担心批量分配?当人们想要做类似Model::create($request->all()) 的事情时,批量分配是一个问题,而不是当他们手动指定要添加哪个字段时。

标签: php laravel mass-assignment


【解决方案1】:

要使用批量赋值插入/创建,您可以在 Eloquent 模型中声明一个数组,如下所示:

protected $fillable = [
    'order_id',
    'product_id',
    'quantity',
    'more fields names here...'
];

将插入定义的字段名称。查看documentation 了解更多信息。你也可以使用forceCreate 方法,它允许批量赋值。

另外,500 internal server error 对具体错误不明显,请自行查找。

【讨论】:

    【解决方案2】:

    这是一个示例,您可以制作数据数组并可以在此处以相同的方式插入。

    $data = array(
        array(
            'name'=>'Coder 1', 'rep'=>'4096',
            'created_at'=>date('Y-m-d H:i:s'),
            'modified_at'=> date('Y-m-d H:i:s')
           ),
        array(
             'name'=>'Coder 2', 'rep'=>'2048',
             'created_at'=>date('Y-m-d H:i:s'),
             'modified_at'=> date('Y-m-d H:i:s')
           ),
        //...
    );
    
    YourModelName::create($data);
    

    【讨论】:

      【解决方案3】:

      你可以这样插入

      $data = array(
      array('name'=>'Coder 1', 'rep'=>'4096'),
      array('name'=>'Coder 2', 'rep'=>'2048'),
      //...
      );
      OrderDetail::insert($data);
      

      也可以填写这些文件

      protected $fillable = [
      'name',
      'rep_id',
      ];
      

      【讨论】:

      • 我已经使用了可填充的。但我不知道我可以静态调用 OrderDetail 模型的方法。
      • @CihanKüsmez 是的,你可以静态调用
      • 可以从Controllers中静态调用Models的每一个方法吗?
      • @CihanKüsmez 是的,你可以
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 1970-01-01
      • 2011-02-15
      • 1970-01-01
      • 2012-02-16
      • 2023-04-09
      相关资源
      最近更新 更多