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

标签 javascript sql node.js express sequelize.js

我正在使用 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/

相关文章:

javascript - 当加载了 javascript 和 css 的页面时,div 垂直打开

MySQL:使用 Union 将多个 Select 查询拆分到各自的表中

c# - 带有空值的 SQL Server 查询

c++ - 如何从 ADO/C++ 调用 MSSQL 系统函数?

node.js - 在线广播如何直播音乐,是否有可用的资源来使用 Node.js 构建一个?

javascript - 错误 : Only absolute URLs are supported in nextjs

javascript - 为 AmCharts 4 标签添加样式

javascript - 如何垂直和水平延迟加载图像?

javascript - 如何使用botkit在特定时间发送消息?

javascript - 带对象的函数和直接对象的区别