我知道一个简单的答案可能是返回所有属性的查询表。但是,由于模型是在代码中定义的,我想知道不查询数据库是否可以得到结果,或者如果需要查询,那么哪个查询是优化的?顺便说一句,我正在使用续集V5和Mysql 5.7。
oug3syen1#
可以迭代Model类的rawAttributes
rawAttributes
for( let key in Model.rawAttributes ){ console.log('Field Name: ', key); // this is name of the field console.log('Field Type: ', Model.rawAttributes[key].type.key); // Sequelize type of field }
rawAttributes的 keys 是字段名,即列名;rawAttributes的 * 值 * 是这些列的Sequelize定义,包括init/define方法中解释的属性,例如type、allowNull、defaultValue、unique等。记住在create any associations和Model上的任何其他设置(Model.hasOne()或Model.belongsTo(),Model.associate() function中的任何内容)之后选中rawAttributes,否则属性对象将不包括外键列。旁注,在Sequelize v4中,Model.attributes===Model.rawAttributes,所以它们是同一个东西的别名。在Sequelize v6+中,您可以使用Model.getAttributes(),这在文档中有说明
init/define
type
allowNull
defaultValue
unique
Model
Model.hasOne()
Model.belongsTo()
Model.associate()
Model.attributes===Model.rawAttributes
Model.getAttributes()
ttcibm8c2#
似乎每个模型都有一个属性“rawAttributes”,它包含了所有的列名。这可能不是官方的方式,但它可以解决我的问题。
7nbnzgx93#
你也可以用这个作为答案:
for( let key of Object.keys(models.Modelname.attributes)) { columns.push({ name:key, type:models.Modelname.attributes[key].type.key }); }
3条答案
按热度按时间oug3syen1#
可以迭代Model类的
rawAttributes
rawAttributes
的 keys 是字段名,即列名;rawAttributes
的 * 值 * 是这些列的Sequelize定义,包括init/define
方法中解释的属性,例如type
、allowNull
、defaultValue
、unique
等。记住在create any associations和
Model
上的任何其他设置(Model.hasOne()
或Model.belongsTo()
,Model.associate()
function中的任何内容)之后选中rawAttributes
,否则属性对象将不包括外键列。旁注,在Sequelize v4中,
Model.attributes===Model.rawAttributes
,所以它们是同一个东西的别名。在Sequelize v6+中,您可以使用
Model.getAttributes()
,这在文档中有说明ttcibm8c2#
似乎每个模型都有一个属性“rawAttributes”,它包含了所有的列名。这可能不是官方的方式,但它可以解决我的问题。
7nbnzgx93#
你也可以用这个作为答案: