Javascript 如何从关联模型中获取对象?
我正在使用NodeJS、Express、SQL和Sequelize。我有两种型号:路线和交通。路线属于运输工具,运输工具有许多路线。我想获取与我的路线相关联的传输,以便获取其数据,例如:Javascript 如何从关联模型中获取对象?,javascript,sql,node.js,express,sequelize.js,Javascript,Sql,Node.js,Express,Sequelize.js,我正在使用NodeJS、Express、SQL和Sequelize。我有两种型号:路线和交通。路线属于运输工具,运输工具有许多路线。我想获取与我的路线相关联的传输,以便获取其数据,例如: route.getTransport() 或 因此,我可以: route.getTransport().getName() 或 因此,我从数据库中获取所有路由: Route.findAll({ where: { destination: "What
route.getTransport()
或
因此,我可以:
route.getTransport().getName()
或
因此,我从数据库中获取所有路由:
Route.findAll({
where: {
destination: "Whatever",
origin: "Whatever"
}
})
.catch(err => {
return err;
});
我已经看到,如果我在查询中添加“include”,我可以这样做:
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
})
希望它能帮助任何人。您可以尝试以下代码:
Route.findAll({
attributes: [
"id",
"origin",
"destination",
"transport.name",
"transport.type"
],
where: {
destination,
origin
},
include: [{
model: db.transport,
as: 'transport',
attributes : []
}],
raw: true,
subQuery: false
})
希望它对任何人都有帮助。您是否需要基于某些路线的特定
运输行?您可以根据自己的要求执行传输.findOne()
。但是,如果要获得大量线路,最好通过包含来减少选择的数量,从而减少负载。您是否需要基于某些路线线路的特定运输
行?您可以根据自己的要求执行传输.findOne()
。但是如果你有很多行要获取,最好通过include
来减少选择的数量,从而减少负载。这使用include,我要求一种不使用include的方法。这使用include,我要求一种不使用include的方法。
Route.findAll({
attributes: [
"id",
"origin",
"destination",
"transport.name",
"transport.type"
],
where: {
destination,
origin
},
include: [{
model: db.transport,
as: 'transport',
attributes : []
}],
raw: true,
subQuery: false
})