Javascript 为什么sequelize忽略references属性?
我使用sequelize:Javascript 为什么sequelize忽略references属性?,javascript,node.js,sequelize.js,Javascript,Node.js,Sequelize.js,我使用sequelize: "dependencies": { "@types/node": "^14.14.6", "sequelize": "^6.3.5", "tedious": "^9.2.1", "typescript": "^4.0.5" } 我的sql数据库中有两个
"dependencies": {
"@types/node": "^14.14.6",
"sequelize": "^6.3.5",
"tedious": "^9.2.1",
"typescript": "^4.0.5"
}
我的sql数据库中有两个表:user
和task
task
表中的task\u user\u id
引用了用户表:
taskUserId: {
type: DataTypes.UUID,
allowNull: true,
references: {
model: "user",
key: "id",
},
field: "task_user_id",
},
那么,为什么当我运行findAll
函数时,我得不到对象内部的用户详细信息呢
const u = await Task.findAll({ raw: true });
也许我的代码中缺少什么
task.ts:
/* jshint indent: 2 */
import { DataTypes, Model, Sequelize } from "sequelize";
export interface TaskAttributes {
id?: number;
taskUserId?: string;
name?: string;
}
export class Task
extends Model<TaskAttributes, TaskAttributes>
implements TaskAttributes {
id?: number;
taskUserId?: string;
name?: string;
static initModel(sequelize: Sequelize) {
Task.init(
{
id: {
autoIncrement: true,
type: DataTypes.INTEGER,
allowNull: false,
primaryKey: true,
},
taskUserId: {
type: DataTypes.UUID,
allowNull: true,
references: {
model: "user",
key: "id",
},
field: "task_user_id",
},
name: {
type: DataTypes.STRING(600),
allowNull: true,
field: "task_name",
},
},
{
sequelize,
tableName: "task",
schema: "dbo",
timestamps: false,
}
);
return Task;
}
}
/*jshint缩进:2*/
从“Sequelize”导入{DataTypes,Model,Sequelize};
导出接口任务属性{
id?:编号;
taskUserId?:字符串;
名称?:字符串;
}
导出类任务
扩展模型
实现TaskAttributes{
id?:编号;
taskUserId?:字符串;
名称?:字符串;
静态initModel(sequelize:sequelize){
Task.init(
{
身份证:{
自动递增:真,
类型:DataTypes.INTEGER,
allowNull:错,
primaryKey:没错,
},
taskUserId:{
类型:DataTypes.UUID,
阿洛诺:是的,
参考资料:{
型号:“用户”,
密钥:“id”,
},
字段:“任务\用户\ id”,
},
姓名:{
类型:DataTypes.STRING(600),
阿洛诺:是的,
字段:“任务名称”,
},
},
{
续集,
tableName:“任务”,
模式:“dbo”,
时间戳:false,
}
);
返回任务;
}
}
user.ts:
/* jshint indent: 2 */
import { DataTypes, Model, Sequelize } from 'sequelize';
export interface UserAttributes {
id?: string;
name?: string;
email?: string;
password?: string;
}
export class User extends Model<UserAttributes, UserAttributes> implements UserAttributes {
id?: string;
name?: string;
email?: string;
password?: string;
static initModel(sequelize: Sequelize) {
User.init(
{
id: {
type: DataTypes.UUID,
allowNull: false,
primaryKey: true,
},
name: {
type: DataTypes.STRING(80),
allowNull: false,
},
email: {
type: DataTypes.STRING(255),
allowNull: false,
},
password: {
type: DataTypes.STRING,
allowNull: false,
},
},
{
sequelize,
tableName: 'user',
schema: 'dbo',
timestamps: false,
}
);
return User;
}
}
/*jshint缩进:2*/
从“Sequelize”导入{DataTypes,Model,Sequelize};
导出接口用户属性{
id?:字符串;
名称?:字符串;
电子邮件?:字符串;
密码?:字符串;
}
导出类用户扩展模型实现用户属性{
id?:字符串;
名称?:字符串;
电子邮件?:字符串;
密码?:字符串;
静态initModel(sequelize:sequelize){
User.init(
{
身份证:{
类型:DataTypes.UUID,
allowNull:错,
primaryKey:没错,
},
姓名:{
类型:DataTypes.STRING(80),
allowNull:错,
},
电邮:{
类型:DataTypes.STRING(255),
allowNull:错,
},
密码:{
类型:DataTypes.STRING,
allowNull:错,
},
},
{
续集,
tableName:'用户',
架构:“dbo”,
时间戳:false,
}
);
返回用户;
}
}
为了请求具有链接模型的模型,您应该在模型之间添加明确的关联,如下所示:
Task.belongTo(User, { foreignKey: 'task_user_id' })
const u = await Task.findAll({ raw: true, include: [User] });
之后,您可以与链接用户一起查询任务,如下所示:
Task.belongTo(User, { foreignKey: 'task_user_id' })
const u = await Task.findAll({ raw: true, include: [User] });
因此,`references:{model:“user”,key:“id”,},`这不重要吗?不,它只是用于使用
sequelize.sync
,也用于“无约束地强制外键引用”,请参阅