В 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)
Потому что я получаю ошибку (500 внутренняя ошибка сервера) с этим кодом
(new OrderDetail)->create($orderDetailData);
Чтобы вставить / создать с помощью массового присваивания, вы можете объявить массив в вашем Eloquent
модель, как эта:
protected $fillable = [
'order_id',
'product_id',
'quantity',
'more fields names here...'
];
Определенные имена полей будут вставлены. Проверить документация для большего. Также вы можете использовать forceCreate метод, который позволяет массовое назначение.
Так же 500 internal server error
не ясно о конкретной ошибке, так что выясните это.
это пример, который вы можете сделать массивом ваших данных и вставить его таким же образом.
$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);
Вы можете вставить этот путь
$data = array(
array('name'=>'Coder 1', 'rep'=>'4096'),
array('name'=>'Coder 2', 'rep'=>'2048'),
//...
);
OrderDetail::insert($data);
также сделать заполненные эти поля
protected $fillable = [
'name',
'rep_id',
];