gpt4 book ai didi

javascript - 如何从关联模型中获取对象?

转载 作者:行者123 更新时间:2023-12-03 22:21:15 26 4
gpt4 key购买 nike

我正在使用 NodeJS、Express、SQL 和 Sequelize。我有 2 个模型:路线和运输。一个路由属于一个传输,一个传输有很多条路由。我想获取与我的路线相关的传输,以便我可以获取其数据,例如:

route.getTransport() 

或者
route.transport

这样我就可以:
route.getTransport().getName() 

或者
 route.transport.name

所以我从我的数据库中获取所有路线:
Route.findAll({
where: {
destination: "Whatever",
origin: "Whatever"
}
})
.catch(err => {
return err;
});

我已经看到,如果我在查询中添加“包含”,我可以这样做:
Route.findAll({
where: {
destination,
origin
},
include: [{
model: db.transport,
as: 'transport'
}]
})

但是,如果我不这样做,我将遍历找到的每条路线,并且无法访问关联的交通工具。有没有办法在不必添加“包含”的情况下做到这一点?

我的路线模型文件:
module.exports = (sequelize, Sequelize) => {
const Route = sequelize.define("route", {
origin: {
type: Sequelize.STRING(100)
},
destination: {
type: Sequelize.STRING(100)
},
transportId: {
type: Sequelize.INTEGER,
required: true
}
});

return Route;
};

我的运输模型文件:
module.exports = (sequelize, Sequelize) => {
const Transport = sequelize.define("transport", {
name: {
type: Sequelize.STRING(100)
},
type: {
type: Sequelize.STRING(100)
},
capacity: {
type: Sequelize.INTEGER
}
});

return Transport;
};

我的模型在 index.js 中的关系部分:
db.transport.hasMany(db.route, { as: "routes" });
db.route.belongsTo(db.transport, {
foreignKey: "transportId",
as: "transport"
});

谢谢!

最佳答案

您可以尝试以下代码:

Route.findAll({
attributes: [
"id",
"origin",
"destination",
"transport.name",
"transport.type"
],
where: {
destination,
origin
},
include: [{
model: db.transport,
as: 'transport',
attributes : []
}],
raw: true,
subQuery: false
})
希望它会帮助任何人。

关于javascript - 如何从关联模型中获取对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62372576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com