Вставка элементов в базу данных с помощью Sequelize в ExpressJS. В зависимости от количества элементов, вставляемых в представление, используется либо create, либо bulkcreate.
module.exports.create = async (req, res) => {
try {
const plan_id = req.body.plan_id;
if(req.body.activities < 2) {
let activities = {
activity_name: req.body.activities[0].name,
comment: req.body.activities[0].comment,
plans_id: plan_id
}
console.log(activities);
await ActivityModel.Activity.create(activities);
console.log('insert succeeded');
res.redirect('/plans/edit/' + plan_id);
}
let activities = req.body.activities[0].name.map(
(name, i) => {
return {
activity_name: name,
comment: req.body.activities[0].comment[i],
plans_id: plan_id
}
});
await ActivityModel.Activity.bulkCreate(activities);
res.redirect('/plans/edit/' + plan_id);
}
catch(error) {
res.send(error);
}
};
Попытка использовать массовое создание в зависимости от размера массива деятельностей [] [name] из шаблона представления.
<input type="text" class="form-control" name="activities[][name]" placeholder="Activity">
<label>Comment</label>
<input type="text" class="form-control" name="activities[][comment]" placeholder="Comment">
Когда используется действие [0] .name.length, если к нему добавляется только 1 элемент, req.body.activities выглядит так: [ { name: 'asd', comment: 'asd' } ]
где name - это объект. Если одновременно больше элементов [ { name: [ 'a3', 'a4' ], comment: [ 'c3', 'c4' ] } ]
, свойство name становится массивом.
Ищите способ измерить это в операторе if в контроллере, чтобы иметь возможность массового создания многих и, если только, одного элемента, создайте один экземпляр.