I have some jQuery logic setup where users can submit multiple field values, which should be created as individual records in my database. My former solution to doing this was to map my values to a variable that is then used with the .bulkCreate
method, but I was unaware that MYSQL does not support auto-incrementing fields with this method. As a result I decided to take my logic and instead create a for loop with the .create
method. Unfortunately I receive this error message: TypeError: this.build(...).save is not a function
at the line models.DiscoverySource.create(sources)
. Why does this message appear when I'm not using the build method?
.post(function(req, res){
console.log(req.body.discoverySource);
var sources = _.map(req.body.discoverySource, function (source) {
return {
discoverySource: source,
organizationId: req.body.organizationId
};
});
console.log("These are the" + sources); //outputs "These are the [object Object],[object Object], [object Object]
console.log(sources[0].discoverySource); //outputs correctly first value
console.log(sources[0].organizationId); //outputs correctly the first value
for (i=0; i < sources.length; i++){
models.DiscoverySource.create(sources)
.then(function(){
return models.DiscoverySource.findAll();
}).then(function(discoverySource){
console.log(discoverySource);
res.redirect('/app');
}).catch(function(error){
res.send(error);
console.log('Error during Post: ' + error);
});
}
});
The create
method cannot accept an array of objects.
If you need the ID's, and need to wait until all the object are created, you will need to wait for all the individual create
promises :
var promises = sources.map(source => models.DiscoverySource.create(source));
Promise.all(promises)
.then(() => models.DiscoverySource.findAll())
.then(discoverySource => {
console.log(discoverySource);
res.redirect('/app');
}).catch(error => {
res.send(error);
console.log('Error during Post: ' + error);
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With