如何在我的模型中定义来自 mysql 中另一个 table 的 id 数组并进行续集

How to define in my model an array of id from another table in mysql and sequelize

我在 express.js、node.js、mysql 中创建了一个 api 并进行续集。

我有两个模型:自定义字段和客户类型

这是我的客户类型模型:

module.exports = (sequelize, DataTypes) => {

    const CustomerType = sequelize.define("customerType", {
        name: {
            type: DataTypes.STRING,
            allowNull: false
        },
        description: {
            type: DataTypes.STRING,
            allowNull: false
        },
        user_id: {
            type: DataTypes.STRING,
            allowNull: false
        }
    })

    return CustomerType
}

还有我的自定义字段模型:

const customerType = require('./customerTypeModel')

module.exports = (sequelize, DataTypes) => {

    const CustomField = sequelize.define("customField", {
        customer_type_ids: [
            {
                type: DataTypes.INTEGER,
                references: {
                    model: customerType,
                    key: "id"
                }
            }
        ],
        user_id: {
            type: DataTypes.STRING,
            allowNull: false
        },
        system_name: {
            type: DataTypes.STRING,
            allowNull: true
        },
        title: {
            type: DataTypes.STRING,
            allowNull: true
        },
        type: {
            type: DataTypes.STRING,
            allowNull: true
        },
        required: {
            type: DataTypes.BOOLEAN,
            allowNull: true
        },
    })
    return CustomField
}

我需要在我的 customField table 中包含一个来自 customerType table 的 id 数组。 例如,我需要像这样得到一个 json :

{
 "id": 1
 "customer_types_ids": [ 
   {
     "id": 1,
     "name": "Customers",
     "description": "Customers",
     "user_id": "123456"
   },
   {
     "id": 2,
     "name": "Leads",
     "description": "Leads",
     "user_id": "123456"
   }
],
 "user_id": "123456",
 "system_name": "firstname",
 "title": "Firstname",
 "type": "text",
 "required": true
}

我应该如何构建我的自定义字段模型才能在 return 中拥有这样的 json?

感谢您的帮助!

我假设您期望 CustomFieldCustomerType 之间存在 One-to-Many 关系。在这种情况下,CustomerType 拥有关系,因此在 CustomerType 的关系 table 中存在对 CustomField 的引用,称为 customFieldId

// customerType.js
module.exports = (sequelize, DataTypes) => {
    const CustomerType = sequelize.define("customerType", {
        name: {
            type: DataTypes.STRING,
            allowNull: false
        },
        description: {
            type: DataTypes.STRING,
            allowNull: false
        },
        user_id: {
            type: DataTypes.STRING,
            allowNull: false
        }
    });

    return CustomerType;
}

// customField.js
module.exports = (sequelize, DataTypes) => {
    const CustomField = sequelize.define("customField", {
        user_id: {
            type: DataTypes.STRING,
            allowNull: false
        },
        system_name: {
            type: DataTypes.STRING,
            allowNull: true
        },
        title: {
            type: DataTypes.STRING,
            allowNull: true
        },
        type: {
            type: DataTypes.STRING,
            allowNull: true
        },
        required: {
            type: DataTypes.BOOLEAN,
            allowNull: true
        },
    });

    return CustomField;
}

// db.js
...
const CustomerType = require("./customerType.js")(sequelize, Sequelize.DataTypes);
const CustomField = require("./customField.js")(sequelize, Sequelize.DataTypes);

CustomField.hasMany(CustomerType, { as: "customer_types_ids" });
CustomerType.belongsTo(CustomField, {
    foreignKey: "id",
    as: "customFieldId",
});

这应该定义两个具有 One-to-Many 关系的关系 table。以下代码可用于加载 CustomField 及其所有 CustomerType

CustomField.findByPk(id, { include: ["customer_types_ids"] });