Вставка массового назначения в Eloquent

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

1

Решение

Чтобы вставить / создать с помощью массового присваивания, вы можете объявить массив в вашем Eloquent модель, как эта:

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

Определенные имена полей будут вставлены. Проверить документация для большего. Также вы можете использовать forceCreate метод, который позволяет массовое назначение.

Так же 500 internal server error не ясно о конкретной ошибке, так что выясните это.

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

Вы можете вставить этот путь

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

также сделать заполненные эти поля

protected $fillable = [
'name',
'rep_id',
];
0
По вопросам рекламы [email protected]