Sequelize.js 这是在Sequelize中定义表关系的正确方法吗?

Sequelize.js 这是在Sequelize中定义表关系的正确方法吗?,sequelize.js,Sequelize.js,我发现如果您使用的表不符合它们的约定,那么这些表很长,很难理解 如果我有两张桌子: people ( people_id - uuid name - text ) parties ( parties_id - uuid people_id - uuid (foreign key) ) 我这样定义我的模型对吗? function getPeople() { let entity = {}; entity['people_id'] = {type: Sequelize

我发现如果您使用的表不符合它们的约定,那么这些表很长,很难理解

如果我有两张桌子:

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;
}
假设:

  • 如果我省略了“belongsTo”部分,那么根据我对文档的理解,它实际上不会是一个关联,因此我无法使用include:[]提取查询中的相关数据
  • 如果我省略了“references”部分,那么我就无法指定本地字段名“peopleId”,与约定的“peopleId”不同,也无法设置“delferable”
  • 我假设我可以使用getPeople()返回一个用于外键的类,而不必是单例
如果我省略了“belongsTo”部分,那么根据我对文档的理解,它实际上不会是一个关联,因此我无法使用include:[]提取查询中的相关数据

正确-仅使用belongs to,您只能进行
聚会。findAll(包括人)
-要以其他方式进行,您还需要设置反向关联

如果我省略了“references”部分,那么我就无法指定本地字段名“peopleId”,与约定的“peopleId”不同,也无法设置“delferable”

是的

我假设我可以使用getPeople()返回一个用于外键的类,而不必是单例

如果您有同一模型的多个实例,您可能会遇到一些微妙的问题-一般的模式是在一个单独的文件中定义每个模型,并需要它一次。在需要访问模型的任何地方,都可以从sequelize实例访问模型-请参阅

如果我省略了“belongsTo”部分,那么根据我对文档的理解,它实际上不会是一个关联,因此我无法使用include:[]提取查询中的相关数据

正确-仅使用belongs to,您只能进行
聚会。findAll(包括人)
-要以其他方式进行,您还需要设置反向关联

如果我省略了“references”部分,那么我就无法指定本地字段名“peopleId”,与约定的“peopleId”不同,也无法设置“delferable”

是的

我假设我可以使用getPeople()返回一个用于外键的类,而不必是单例


如果您有同一模型的多个实例,您可能会遇到一些微妙的问题-一般的模式是在一个单独的文件中定义每个模型,并需要它一次。无论您在何处需要访问模型,都可以从sequelize实例访问它-请参见

,我的意思是,除了singleton之外。在这个类中,我没有找到associate方法中“models”的来源:。它叫Sequelize吗?通过应用程序代码?从index.js中注入,它首先需要所有模型,然后调用
associate
来设置除单例之外的关联,我的意思是。在这个类中,我没有找到associate方法中“models”的来源:。它叫Sequelize吗?通过应用程序代码?从index.js中注入,首先需要所有模型,然后调用
associate
来设置关联