为什么 sequelize 忽略引用 属性?
Why sequelize ignore the references property?
我正在使用续集:
"dependencies": {
"@types/node": "^14.14.6",
"sequelize": "^6.3.5",
"tedious": "^9.2.1",
"typescript": "^4.0.5"
}
我的 sql 数据库中有两个 table:user
和 task
。
task_user_id
in task
table 引用了用户 table:
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;
}
}
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;
}
}
为了请求具有链接模型的模型,您应该像这样在模型之间添加显式关联:
Task.belongTo(User, { foreignKey: 'task_user_id' })
之后,您可以像这样与链接用户一起查询任务:
const u = await Task.findAll({ raw: true, include: [User] });
我正在使用续集:
"dependencies": {
"@types/node": "^14.14.6",
"sequelize": "^6.3.5",
"tedious": "^9.2.1",
"typescript": "^4.0.5"
}
我的 sql 数据库中有两个 table:user
和 task
。
task_user_id
in task
table 引用了用户 table:
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;
}
}
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;
}
}
为了请求具有链接模型的模型,您应该像这样在模型之间添加显式关联:
Task.belongTo(User, { foreignKey: 'task_user_id' })
之后,您可以像这样与链接用户一起查询任务:
const u = await Task.findAll({ raw: true, include: [User] });