我有一个用户表,其中有一个角色表的外键列。
我在 mysql 中定义了所有关系,并使用sequelize-auto
我生成了模型。
为用户生成的模型是这样的:
const user = sequelize.define('user', {
Id: {
type: DataTypes.INTEGER(11),
allowNull: false,
primaryKey: true,
autoIncrement: true,
},
Email: {
type: DataTypes.STRING(45),
allowNull: false,
unique: true,
},
RoleId: {
type: DataTypes.INTEGER(11),
allowNull: false,
references: {
model: 'roles',
key: 'Id',
},
},
});
Run Code Online (Sandbox Code Playgroud)
我认为我的参考已设置,因此当我在解析器中执行以下操作时:
users: async () => {
const users = await db.user.findAll({
include: [
{
model: db.roles,
},
],
});
return users
Run Code Online (Sandbox Code Playgroud)
我应该在操场上使用以下查询返回用户角色列表:
{users
{roles
{Name, Id}
}
}
Run Code Online (Sandbox Code Playgroud)
相反我得到了
角色未与用户关联!
后来我发现我需要建立一个关联:
user.associate = …
Run Code Online (Sandbox Code Playgroud) 我尝试使用sequelize-auto从SequelizeJS的现有PostgreSQL表中自动生成模型.
npm install -g sequelize-auto pg
sequelize-auto -o "./models" -d myDatabase -h localhost -u myUsername -p 5432 -x myPassword -e postgres
Run Code Online (Sandbox Code Playgroud)
但是,它失败了,错误 TypeError: connection.query(...).on is not a function
注意:我使用以下库版本:
我使用以下配置来生成模型
const auto = new SequelizeAuto(
process.env.DB_NAME,
process.env.DB_USER,
process.env.DB_PASS,
{
host: process.env.DB_HOST,
dialect: 'mysql',
typescript: true,
camelCaseForFileName: true,
directory: './src/data/entity'
})
auto.run();
Run Code Online (Sandbox Code Playgroud)
但我在生成的模型上遇到错误Cannot use namespace 'DataTypes' as a type.ts(2709)
FYR 我还提出了一个问题 GitHub 存储库:https://github.com/sequelize/sequelize-auto/issues/384