node.js - 如何在sequelize中关联jsonb类型字段和表?

标签 node.js postgresql sequelize.js

我的 Postgre 数据库中有两个表。

  • 项目(字段名称和类型)
    id   name    customers
    uuid varchar jsonb
    
  • 客户(字段名称和类型)
    id   name
    uuid varchar
    

  • 这是定义的项目模型。
    const project = (sequelize, DataTypes) => {
      const Project = sequelize.define('project', {
        id: {
          type: DataTypes.UUID,
          defaultValue: DataTypes.UUIDV4,
          primaryKey: true,
        },
        name: {
          type: DataTypes.STRING,
          allowNull: false,
          unique: true,
        customers: {
          type: DataTypes.JSONB,
          defaultValue: [],
          allowNull: true,
        }
      })
      return Project
    }
    
    export default project
    
    这是定义的项目模型。
    export default (sequelize, DataTypes) => {
      return sequelize.define(
        'customer',
        {
          id: {
            type: DataTypes.UUID,
            defaultValue: DataTypes.UUIDV4,
            primaryKey: true,
          },
          name: {
            type: DataTypes.STRING,
            allowNull: true,
          },
      )}
    }
    
    因此,项目表中的客户字段具有 json 类型值。
    例如(uuid 数组):
    customers = ["0000-0000-0000-0000", "1111-1111-1111-1111"];
    
    在这种情况下,如何在项目和客户表之间添加关联?
    理想情况下,我希望在查找所有项目时包含与客户匹配的 id,如下所示。
    const getProjects = async () => {
      try {
        return await models.Projects.findAll({
          include: [{
            model: models.Customers // It should include all customers for a project
          }]
        })
      } catch (error) {
        throw error
      }
    }
    
    希望早日收到你的消息。
    谢谢你。

    最佳答案

    你的数据模型是错误的,只会给你带来麻烦。如果要对两个实体之间的多对多关系建模,请创建一个“连接表”,其中包含两个相关表的外键。主键是两个外键的组合。

    关于node.js - 如何在sequelize中关联jsonb类型字段和表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67732717/

    相关文章:

    node.js - 如何使用 Gulp 通过 Browerify 从 Bower 组件创建一个单独的供应商包

    node.js - 无法连接到 mongolab,出现 MongoError : auth failed

    sequelize.js - Sequelize : how can i get the entity i saved with Create

    postgresql - 区分夏令时转换期间的时间

    node.js - 我的 sequelize-auto 命令执行抛出错误 "Please install tedious package manually"

    sequelize.js - 使用 sequelize 创建新条目后包含连接表数据

    node.js - 我可以用 React 中的数据进行服务器渲染吗?

    javascript - NodeJS - 将每个 HTTP 请求的 session 数据存储在 "global"变量中

    ruby-on-rails - 错误 : for xxx_postgres_1 Cannot start service postgres: b'driver failed programming external connectivity on endpoint dataimobi-engine_postgres_

    postgresql - 根据 Postgres 中的列值选择