gpt4 book ai didi

mysql - 序列化嵌套模型

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

我有这个项目的模型结构:

  • 公司
  • 用户
  • 设备
  • 使用数据

  • 最终客户(公司)


  • 公司型号:
        var Company = sequelize.define('Company', {
    name: {
    type: DataTypes.STRING,
    allowNull: false,
    unique:true
    },
    location: {
    type: DataTypes.STRING
    }
    });

    Company.associate = function(models) {
    models.Company.hasMany(models.Company, {
    as:'EndCustomer',
    foreignKey:'CompanyId'
    })
    models.Company.hasMany(models.User);
    models.Company.hasMany(models.Device);
    };

    return Company;
    登录后,用户可以使用这种代码查询属于同一公司的设备的使用数据
      models.UsageData.findAll({
    order: sequelize.literal("startTime DESC"),
    include: [
    {
    model: models.Device,
    required: true,
    include: [
    {
    model: models.Company,
    required:true,
    include: [
    {
    model: models.User,
    required:true,
    attributes:[],
    where: {
    id: *userid*,
    },
    },
    ],
    },
    ],
    },
    ],
    })
    现在我需要找出如何查询属于母公司拥有的 EndCustomers 的设备的使用数据,并将数据添加到第一个查询中。
    我试过这种代码
      models.UsageData.findAll({
    order: sequelize.literal("startTime DESC"),
    include: [
    {
    model: models.Device,
    required: true,
    include: [
    {
    model: models.Company,
    required:true,
    include: [
    {
    model: models.User,
    required:true,
    attributes:[],
    where: {
    id: *userid*,
    },
    },
    ],
    },
    ],
    },
    {
    model: models.Device,
    required: true,
    include: [
    {
    model: models.Company,
    as:"EndCustomer",
    required:true,
    include: [
    {
    model: models.Company,
    required:true,
    include: [
    {
    model:models.User,
    required:true,
    where:{ id: *userid* }
    }
    ],
    },
    ],
    },
    ],
    }
    ],
    })
    但这不起作用,因为 Device 和 EndCustomer 公司之间的关联是错误的
    我可以通过创建一个查询来创建一个解决方法,其中公司位于查询的顶部,例如:
    models.Company.findOne({
    include:[
    {
    model: models.User,
    where: {id: *userid*},
    required:true
    },
    {
    model:Device,
    /* Parent company usage data */
    },
    {
    model:models.Company,
    as:"EndCustomer",
    include:[
    model:models.Device
    /* EndCustomer usage data */
    ]
    }]
    })

    但这不是好方法,因为我还需要限制 UsageData 的行。
    有没有更好的方法来做到这一点?

    最佳答案

    您需要添加关联才能访问上级组织:

    models.Company.belongsTo(models.Company, {
    as:'Parent',
    foreignKey:'CompanyId'
    })
    然后将其添加到 include 选项:
    {
    model: models.Device,
    required: true,
    include: [
    {
    model: models.Company,
    required: true,
    include: [
    {
    model: models.Company,
    as: 'Parent',
    required: true,
    include: [
    {
    model: models.User,
    required: true,
    where:{ id: *userid* }
    }
    ],
    },
    ],
    }
    关于组合两个条件:我只是不确定 2 个包含的 Device 模型是否可以在同一个查询中一起工作。

    关于mysql - 序列化嵌套模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64970807/

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