Imagine I have two models:
var Movie = sequelize.define('movies', {
/* model definition */
})
var Genre = sequelize.define('genres', {
/* model definition */
});
Movie.hasMany(Genre);
Genre.hasMany(Movie);
If I wanted to stipulate that a Movie MUST have at least one Genre, how would I go about doing that?
I've looked in the obvious places. My initial idea was to build(), validate() and save(), however looking at the source .validate() only accommodates fields defined in the model definition.
e.g.
Genre.find({where:{'name':'horror})
.success(function (horrorGenre) {
var movie = Movie.build({..});
movie.addGenre(horrorGenre);
if (! movie.validate()) { // This doesn't consider related data
movie.save();
}
});
So I figure I need to implement some kind of custom validation mechanism, but I'm not entirely sure where to start.
NOTE I'm maintaining my own fork of Sequelize, so this is more of a question of how I might go about modifying the Sequelize source to do what I want it to do versus throwing together a hacky solid implementation.
you can try to search for genre objects in database and call addGenre for movie
Genre.findall({where:{'name':["genre1","genre1"]})
.success(function (genres) {
if(genres.length==0){
console.log("Genres were not found!");
// exit somehow maybe res.json(200,{"msg","not ok"});
}
var movie = Movie.build({..});
var queryChainer = new Sequelize.Utils.QueryChainer;
for(var i = 0 ; i != genres.length ; i++){
queryChainer.add(movie.addGenre(genres[i].id));
}
queryChainer.run().success(function(){}).error(function(){});
});
this way you will know that at least 1 genre will be added to submitted movie!