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

uoifb46i  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(332)

我正在使用nodejs、express、sql和sequelize。我有两种模式:路线和运输。路线属于运输工具,运输工具有许多路线。我想获取与我的路线相关联的传输,以便获取其数据,例如:

route.getTransport()

或者

route.transport

所以我可以:

route.getTransport().getName()

或者

route.transport.name

所以我从我的数据库里得到了所有的路线:

Route.findAll({
            where: {
                destination: "Whatever",
                origin: "Whatever"
            }
        })
        .catch(err => {
            return err;
        });

我已经看到,如果我在查询中添加“include”如下:

Route.findAll({
            where: {
                destination,
                origin
            },
            include: [{
                model: db.transport,
                as: 'transport'
            }]
        })

但如果不这样做,我将遍历找到的每个路由,并且无法访问与之相关的传输。有没有一种方法不必添加“include”就可以做到这一点?
路线的模型文件:

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"
});

谢谢您!

p8ekf7hl

p8ekf7hl1#

您可以尝试以下代码:

Route.findAll({
  attributes: [
    "id",
    "origin",
    "destination",
    "transport.name",
    "transport.type"
 ],
 where: {
    destination,
    origin
 },
 include: [{
    model: db.transport,
    as: 'transport',
    attributes : []
 }],
 raw: true,
 subQuery: false
})

希望对任何人都有帮助。

相关问题