2

想象一下我有两个模型:

var Movie = sequelize.define('movies', {
 /* model definition */
})

var Genre = sequelize.define('genres', {
 /* model definition */
});

Movie.hasMany(Genre);
Genre.hasMany(Movie);

如果我想规定一部电影必须至少有一个流派,我该怎么做?

我看过明显的地方。我最初的想法是 build()、validate() 和 save(),但是查看源代码 .validate() 仅适用于模型定义中定义的字段。

例如

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();
    }
 });

所以我想我需要实现某种自定义验证机制,但我不完全确定从哪里开始。

注意我正在维护我自己的 Sequelize 分支,所以这更多的是一个问题,即我如何修改 Sequelize 源代码以完成我想要它做的事情,而不是把一个 hacky 可靠的实现放在一起。

4

1 回答 1

1

addGenre您可以尝试在数据库中搜索流派对象并调用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(){});
});

这样您就会知道至少 1 个类型将添加到提交的电影中!

于 2013-05-03T11:06:33.717 回答