在Eloquent中

时间:2015-11-03 11:47:03

标签: php laravel mass-assignment

在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);

我应该如何处理批量插入的批量分配?我应该使用前一个(DB facade)

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

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

3 个答案:

答案 0 :(得分:0)

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

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

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

此外,500 internal server error对于特定错误并不明显,因此请找出它。

答案 1 :(得分:0)

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

$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);

答案 2 :(得分:0)

你可以这样插入

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

也可填写那些文件

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