gpt4 book ai didi

sequelize.js - 使用 Sequelize.js 在一次 'create' 调用中创建模型及其多态关联

转载 作者:行者123 更新时间:2023-12-03 22:20:14 26 4
gpt4 key购买 nike

我已经定义了我的模型,类似于文档中的以下示例:
http://docs.sequelizejs.com/en/latest/docs/associations/#nm

当我尝试使用 Post.create 方法一次性创建帖子及其标签时,帖子、标签和“通过”表行都会被创建,只是 taggable 字段没有在“通过”上设置表,因此未正确定义关联。

如果我分别创建标签和帖子,那么我可以使用 post.addTags 方法来关联标签,在这种情况下,一切正常,taggable 字段按照 Post.belongsToMany 关联范围中的定义进行设置。

我的问题是,我是不是没有将正确的选项传递给 Post.create 方法,还是正在使用具有范围的“通过”表一次性创建 Sequelize 不支持的关联?

下面是创建代码:

models.Post.create({
title: 'test',
tags: [{
name: 'tag1'
}]
}, {
include: [{
model: models.Tag,
as: 'tags',
through: {
model: models.ItemTag,
scope: {
taggable: 'post'
}
}
}]
});


这是生成的 SQL:
Executing (default): INSERT INTO `posts` (`id`,`title`,`created_at`,`updated_at`) VALUES (DEFAULT,'test','2017-01-27 16:29:15','2017-01-27 16:29:15');
Executing (default): INSERT INTO `tags` (`id`,`name`,`created_at`,`updated_at`) VALUES (DEFAULT,'tag1','2017-01-27 16:29:15','2017-01-27 16:29:15');
Executing (default): INSERT INTO `item_tag` (`tag_id`,`taggable_id`,`created_at`,`updated_at`) VALUES (1,1,'2017-01-27 16:29:15','2017-01-27 16:29:15');

这是我的模型定义:

// Post
export
default
function(sequelize, DataTypes) {
var Post = sequelize.define('Post', {
title: DataTypes.STRING
}, {
classMethods: {
associate: function(models) {
Post.belongsToMany(models.Tag, {
as: 'tags',
foreignKey: 'taggable_id',
constraints: false,
through: {
model: models.ItemTag,
unique: false,
scope: {
taggable: 'post'
}
}
});
}
},
tableName: 'posts',
underscored: true
});

return Post;
};


// Tag
export
default
function(sequelize, DataTypes) {
var Tag = sequelize.define('Tag', {
name: DataTypes.STRING,
}, {
classMethods: {
associate: function(models) {
Tag.belongsToMany(models.Post, {
as: 'posts',
foreignKey: 'tag_id',
constraints: false,
through: {
model: models.ItemTag,
unique: false,
scope: {
taggable: 'posts'
}
}
});
}
},
tableName: 'tags',
underscored: true
});
return Tag;
};

// ItemTag (the "through" table)
export
default
function(sequelize, DataTypes) {
var ItemTag = sequelize.define('ItemTag', {
tag_id: {
type: DataTypes.INTEGER,
unique: 'item_tag',
references: {
model: 'tags',
key: 'id'
}
},
taggable_id: {
type: DataTypes.INTEGER,
unique: 'item_tag'
},
taggable: {
type: DataTypes.STRING,
unique: 'item_tag'
},
}, {
classMethods: {
associate: function(models) {
ItemTag.belongsTo(models.Post, {
foreignKey: 'taggable_id',
constraints: false,
scope: {
taggable: 'post'
}
});

ItemTag.belongsTo(models.Tag, {
foreignKey: 'tag_id',
constraints: false
});
}
},
tableName: 'item_tag',
underscored: true
});

return ItemTag;
};

最佳答案

这实际上是 Sequelize 中的一个错误。我为它创建了一个拉取请求,所以上面的代码应该适用于 Sequelize 的下一个版本。
https://github.com/sequelize/sequelize/pull/7181

关于sequelize.js - 使用 Sequelize.js 在一次 'create' 调用中创建模型及其多态关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41899068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com