Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Есть двухмерный массив, который получаю из формы:
(
['services_id' => $data[$row]['id']],
['date' => $data[$row]['date']],
['accruals' => $data[$row]['accruals']]
)
В БД записываю так:
$accrual->fill([
'services_id' => $data[0]['id'], 'date' => $data[0]['date'], 'accruals' => $data[0]['accruals']
]
) ->save();
Но это всего лишь одна запись из формы. А их может быть порядка 10-15.
Не могу понять как записывать в БД сразу все записи из формы.
В модели прописал разрешение на множественную запись
protected $fillable = ['services_id', 'date', 'accruals'];
Не в сети
$accruals = [];
foreach ($data as $accrualData) {
$accruals[] = [
'services_id' => $accrualData['id'],
'date' => $accrualData['date'],
'accruals' => $accrualData['accruals'],
];
}
Accrual::insert($accruals);
Не в сети
Большое спасибо Владислав. Вы очень помогли мне с решением этой задачи. Правда заметил, что при массовом заполнении поля timestamp не заполняются. Как мне поправить это если это требует ситуация. или подскажите направление где искать ответ.
Не в сети
Добавьте в $accruals[] кличи таймстампов, и fillable в модели Accrual
Не в сети
Владислав, скажите пожалуйста... А такое поведение timestamps нормальное? При такой записи нужно вручную их записывать? Или я все же делаю что-то не правильно?
Добавьте в $accruals[] кличи таймстампов, и fillable в модели Accrual
Сделал как вы сказали. теперь все на месте.
Не в сети
Т.к. происходит insert, то не срабатывают события модели, которые под капотом устанавливают таймстамп свойства.
Если же в цикле делать ::create модели, то они бы устанавливались автоматом. Но тогда будет N запросов в БД. А при insert- 1 запрос
Посмотрите в вендоре HasTimestamps. У него есть методы setCreatedAt и setUpdatedAt.
Их вызывает performInsert() из класса Model, который вызывается ->save() модели.
Не в сети
Страницы 1