在ExpressJS中使用Sequelize将项目插入数据库。根据从视图中插入的项目数,可以使用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]数组的大小,尝试使用bulkcreate。
<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时,如果一次仅添加一项,则req.body.activities看起来像:[ { name: 'asd', comment: 'asd' } ]
,其中name是一个对象。如果一次[ { name: [ 'a3', 'a4' ], comment: [ 'c3', 'c4' ] } ]
上有更多项,则name属性将成为一个数组。
在控制器的if语句中寻找一种测量方法,以能够批量创建很多(如果只有一项)创建单个实例。
答案 0 :(得分:0)
通过在表单中添加隐藏输入来解决,该数组的数组包含一个索引,该索引针对添加的每个实例递增。
<input type="hidden" name="idx[]" value="0">
在控制器中运行一次chekc,决定是否应使用create或bulkcreate。
if(req.body.idx <= 1)