【问题标题】:sequelize many to many association join table not populating续集多对多关联连接表未填充
【发布时间】:2016-06-13 08:42:33
【问题描述】:

HospitalContact 两个模型之间存在多对多关联。在联系人处添加了一条记录,但关联表hospitals_contacts 中没有条目。 sequelize 生成外键contact_id 和hospital_id 作为复合主键。

联系模特

module.exports = function(sequelize, DataTypes) {
    var Contact = sequelize.define("Contact", {

        job_title: DataTypes.STRING,
        first_name: DataTypes.STRING,
        last_name: DataTypes.STRING, 
        archived: DataTypes.BOOLEAN,
        primary_email: {

            type: DataTypes.STRING,
            validate: {
                isEmail: true
            }
        },
        business_number: DataTypes.STRING,
        number_extension: DataTypes.STRING,
        fax_number: DataTypes.STRING

    }, {

        underscored:'true',
        tableName: 'contacts',
        createdAt: false,
        updatedAt: false,

        classMethods: {
            associate: function(models) {
                Contact.belongsToMany(models.Hospital, { through: 'hospitals_contacts'});    
                Contact.belongsTo(models.Type);
                Contact.belongsTo(models.Region)
            }
        },
    });



    return Contact;
};

医院模型

module.exports = function(sequelize, DataTypes) {

    var Hospital = sequelize.define("Hospital", {

        name: DataTypes.STRING,
        mak_code: DataTypes.STRING,
        licensed_tm_lab: DataTypes.BOOLEAN

    }, { 

        underscored:'true',
        tableName: 'hospitals',     
        createdAt: false,
        updatedAt: false,

        classMethods: {
            associate: function(models) {

                Hospital.belongsToMany(models.Contact, { through: 'HospitalsContacts'});
                Hospital.belongsTo(models.Address)
            }
        }
    }); 

    return Hospital;
};

用于添加联系人的 api 端点

var hospitalInstance = models.Hospital;
var contactData = req.body;

models.Contact.create({ 
    first_name: contactData.first_name, 
    last_name: contactData.last_name, 
    type_id: contactData.type,
    job_title: contactData.job_title, 
    primary_email: contactData.email, 
    business_number:contactData.phone_number,
    fax_number:contactData.fax,
    number_extension:contactData.extension,
    region_id: contactData.region,
    committee_id: contactData.committee,
    archived: false,
    hospitalInstance: {id:contactData.hospital}
    },
    {
        include: [hospitalInstance]

    });

【问题讨论】:

    标签: mysql node.js sequelize.js


    【解决方案1】:

    我建议您尝试以下方法:

    更改联系人中的“通过”属性以匹配医院中的属性:HospitalsContacts,因此您将拥有:

    Contact.belongsToMany(models.Hospital, { through: 'HospitalsContacts'}); //Contact
    Hospital.belongsToMany(models.Contact, { through: 'HospitalsContacts'}); //Hospital
    

    现在我假设您已经创建了医院,并且只想创建一个与该医院相关联的新联系人,对吗?如果是这样:

    var hospital = (...)
    
    hospital.createHospitalContact({
       first_name: contactData.first_name, 
       last_name: contactData.last_name, 
       type_id: contactData.type,
       job_title: contactData.job_title, 
       primary_email: contactData.email, 
       business_number:contactData.phone_number,
       fax_number:contactData.fax,
       number_extension:contactData.extension,
       region_id: contactData.region,
       committee_id: contactData.committee,
       archived: false,
    }).then(function(contact) {
       //Do something
    })
    

    【讨论】:

      猜你喜欢
      • 2016-01-09
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      • 2020-02-08
      • 1970-01-01
      • 2022-01-13
      • 2014-09-20
      相关资源
      最近更新 更多