模型关联操作
515字约2分钟
2024-07-1
模型关联操作
在开发过程中操作最多的场景示例如下:
分页查询
// 查询用户的所有订单
User.findAll({
// 联合查询:关联模型数组
include: [
{
// 模型
model: Order,
// 别名
as: "orders",
},
],
// 页码起始是0
offset: 0,
// 每页数据条数
limit: 10,
});
查询不到就创建
// 查询用户的所有订单
User.findOrCreate({
where: {
id: 1,
},
// 查询不到,将要新建的信息
defaults: {
name: "newUser",
},
include: [
{
model: Order,
as: "orders",
},
],
});
关系查询
// 查询用户的所有订单
User.findAll({
include: [
{
model: Order,
as: "orders",
},
],
});
// 查询订单所属的用户
Order.findAll({
include: [
{
model: User,
as: "user",
},
],
});
关系删除
// 删除用户的所有订单
User.destroy({
where: {
id: 1,
},
include: [
{
model: Order,
},
],
});
// 删除订单所属的用户
Order.destroy({
where: {
id: 1,
},
include: [
{
model: User,
},
],
});
关系更新
// 更新用户的所有订单
User.update(
{
name: "newName",
},
{
where: {
id: 1,
},
include: [
{
model: Order,
},
],
}
);
// 更新订单所属的用户
Order.update(
{
name: "newName",
},
{
where: {
id: 1,
},
include: [
{
model: User,
},
],
}
);
关系创建
// 创建用户的所有订单
User.create(
{
name: "newUser",
orders: [
{
name: "newOrder",
},
],
},
{
include: [
{
model: Order,
},
],
}
);
// 创建订单所属的用户
Order.create(
{
name: "newOrder",
user: {
name: "newUser",
},
},
{
include: [
{
model: User,
},
],
}
);
关系查找
// 查找用户的所有订单
User.findByPk(1, {
include: [
{
model: Order,
as: "orders",
},
],
});
// 查找订单所属的用户
Order.findByPk(1, {
include: [
{
model: User,
as: "user",
},
],
});
关系查找并更新
// 查找用户的所有订单并更新
User.findByPk(1, {
include: [
{
model: Order,
as: "orders",
},
],
}).then((user) => {
user.orders.forEach((order) => {
order.name = "newName";
});
return user.save();
});
// 查找订单所属的用户并更新
Order.findByPk(1, {
include: [
{
model: User,
as: "user",
},
],
}).then((order) => {
order.user.name = "newName";
return order.save();
} );
关系查找并删除
// 查找用户的所有订单并删除
User.findByPk(1, {
include: [
{
model: Order,
as: "orders",
},
],
}).then((user) => {
return user.orders.destroy();
});
// 查找订单所属的用户并删除
Order.findByPk(1, {
include: [
{
model: User,
as: "user",
},
],
}).then((order) => {
return order.user.destroy();
});
关系查找并创建
// 查找用户的所有订单并创建
User.findByPk(1, {
include: [
{
model: Order,
as: "orders",
},
],
}).then((user) => {
return user.orders.create({
name: "newOrder",
});
});
// 查找订单所属的用户并创建
Order.findByPk(1, {
include: [
{
model: User,
as: "user",
}
],
}).then((order) => {
return order.user.create({
name: "newUser",
});
});