如果您使用的表格不符合惯例,我发现Sequelize docs很长很难理解。
如果我有两张桌子:
people
(
people_id - uuid
name - text
)
parties
(
parties_id - uuid
people_id - uuid (foreign key)
)
我是否正确定义我的模型?
function getPeople()
{
let entity = {};
entity['people_id'] = {type: Sequelize.UUID, primaryKey: true, allowNull : false};
entity['name'] = Sequelize.TEXT;
return sequelize.define('dbo.people', entity, options);
}
function getParties()
{
let entity = {};
entity['parties_id'] = {type: Sequelize.UUID, primaryKey: true, allowNull : false};
entity['people_id'] =
{
type: Sequelize.UUID,
references: {model: getPeople(), key: 'people_id', deferrable: Sequelize.Deferrable.INITIALLY_DEFERRED}
};
const parties = sequelize.define('dbo.parties', entity, options);
parties.belongsTo(this.getPeople(), {foreignKey: 'people_id'});
return parties;
}
假设:
答案 0 :(得分:2)
如果我遗漏'belongsTo'部分,那么我理解文档它实际上不会是一个关联,所以我无法使用include来提取查询中的相关数据:[]
正确 - 只有属于你只能做Parties.findAll(include People)
- 反过来你也需要设置反向关联。
如果我遗漏了'参考'部分,那么我无法指定本地字段名称'people_id'与常规'peopleId'不同,也不能设置'deferrable'
是的
我假设我可以使用getPeople()返回一个用于外键的类,它不必是一个单例
如果您有多个相同模型的实例,则可能会遇到细微问题 - 一般模式是将每个模型定义在单独的文件中并要求它一次。您需要访问模型的任何地方都可以从续集实例访问它 - 请参阅https://github.com/sequelize/express-example