2

2 つのモデルがあるとします。

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

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

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

映画には少なくとも 1 つのジャンルが必要であると規定したい場合、どのようにすればよいでしょうか?

私は明らかな場所を見てきました。私の最初のアイデアは、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 のソースを変更してやりたいことを実行するにはどうすればよいかという問題です。

4

1 に答える 1

1

データベースでジャンルオブジェクトを検索してaddGenremovie

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 に答える