为了账号安全,请及时绑定邮箱和手机立即绑定

续集属于关联给出错误“表名”联系人“指定了多次”

续集属于关联给出错误“表名”联系人“指定了多次”

慕婉清6462132 2022-09-29 17:09:44
我正在尝试通过模型将模型连接到模型。当我喜欢下面时,错误返回:未处理的拒绝 Sequelize数据库错误:多次指定的表名“联系人”。在这种情况下,关联/“as”是否正确?当我尝试包含模型时发生错误。我还插入了带有初始电话行的表。phonecontactcontact_phone.findAllcontact_phoneexports.findAll = (req, res) => {  models.contact.findAll({    include: [      {         model: models.contact_phone,         as: 'contact'      }     ]  })    .then(contacts => {    res.status(200).send(contacts);  });};模型module.exports = (sequelize) => {  const Contact = sequelize.define(    'contact',    {      contact_id: {        type: Sequelize.BIGINT,          primaryKey: true,        autoIncrement: true,        field: 'contact_id'      },      first_name: {        type: Sequelize.STRING,        field: 'first_name'      },      last_name: {        type: Sequelize.STRING,        field: 'last_name',      },      created_at: {        type: Sequelize.DATE,        field: 'created_at'      },      updated_at: {        type: Sequelize.DATE,        field: 'updated_at'         }    },    {      tableName: 'contacts',      freezeTableName: true,    }  );  Contact.associate = (models) => {    Contact.belongsTo(models.contact_phone, {foreignKey: 'contact_id', as: 'contact'});    Contact.hasOne(models.phone, {foreignKey: 'phone_id', through: models.contact_phone});  };  return Contact;};module.exports = (sequelize) => {  const ContactPhone = sequelize.define(    'contact_phone',    {      contact_id: {        type: Sequelize.BIGINT,        references: {          model: 'contact',          key: 'contact_id'        }      },      phone_id: {        type: Sequelize.STRING,        references: {          model: 'phone',          key: 'phone_id'        }      }    }  );  ContactPhone.associate = (models) => {    ContactPhone.belongsTo(models.phone, {foreignKey: 'phone_id', as: 'phone'});    ContactPhone.belongsTo(models.contact, {foreignKey: 'contact_id', as: 'contact'});  };  return ContactPhone;};
查看完整描述

1 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

你可以这样做。你没有包括额外的contact_phone你可以直接用这样的联系和电话来做。


触点模块:


module.exports = (sequelize) => {

    const Contact = sequelize.define(

        'contact',

        {

            contact_id: {

                type: Sequelize.INT,

                primaryKey: true,

                autoIncrement: true,

                field: 'contact_id'

            },

            first_name: {

                type: Sequelize.STRING,

                field: 'first_name'

            },

            last_name: {

                type: Sequelize.STRING,

                field: 'last_name',

            },

            created_at: {

                type: Sequelize.DATE,

                field: 'created_at'

            },

            updated_at: {

                type: Sequelize.DATE,

                field: 'updated_at'

            }

        },

        {

            tableName: 'contacts',

            freezeTableName: true,

        }

    );


    Contact.associate = (models) => {

        Contact.hasOne(models.phone, { // has many or hasOne relationship .here read like contact has one phone 

            foreignKey: 'phone_id',

            onDelete: "CASCADE"

        });

    };


    return Contact;

};

手机模块:


module.exports = (sequelize) => {

    const Phone = sequelize.define(

        'phone',

        {

            phone_id: {

                type: Sequelize.INT,

                primaryKey: true,

                autoIncrement: true,

                field: 'phone_id'

            },

            contact_id: {

                type: Sequelize.INT,

            },

            updated_at: {

                type: Sequelize.DATE,

                field: 'updated_at'

            },

            created_at: {

                type: Sequelize.DATE,

                field: 'created_at'

            }

        },

        {

            tableName: 'phones',

            freezeTableName: true,

        }

    );


    Phone.associate = (models) => {

        Phone.belongsTo(models.contact, {

            foreignKey: 'contact_id',

            as: 'contact',

            onDelete: "CASCADE"

        });

    };

}

您的查询如下所示:


models.contact.findAll({

    include: [

        {

            model: models.phone,

            as: 'contact'

        }

    ]

}).then(contacts => {

    res.status(200).send(contacts);

});

编辑:


如何定义具有相同键和不同别名的更多关联


Phone.associate = (models) => {

    Phone.belongsTo(models.contact, {

        foreignKey: 'contact_id',

        as: 'contact',

        onDelete: "CASCADE"

    });

    Phone.belongsTo(models.contact, {

        foreignKey: 'contact_id',

        as: 'phone',

        onDelete: "CASCADE"

    });

};


查看完整回答
反对 回复 2022-09-29
  • 1 回答
  • 0 关注
  • 78 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信