亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

續集屬于關聯給出錯誤“表名”聯系人“指定了多次”

續集屬于關聯給出錯誤“表名”聯系人“指定了多次”

慕婉清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條經驗 獲得超7個贊

你可以這樣做。你沒有包括額外的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 關注
  • 98 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號