在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);
答案 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',
];