He estado tratando de usar Sequelize para administrar una tienda mysql db. Seguí los documentos aquí: https://sequelize.org/master/manual/assocs.html
Y lo hizo (como dijeron)
const Customer = sequelize.define( "customers", { customer_id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true, }, first_name: { type: DataTypes.STRING, allowNull: false, }, last_name: DataTypes.STRING, }, { tableName: "customers" } ); const Order = sequelize.define( "orders", { order_id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true, }, customer_id: { type: DataTypes.INTEGER, allowNull: false, }, }, { tableName: "orders" } );y luego anuncie la clave foregin así:
Customer.hasMany(Order, { foreignKey: 'customer_id' }); Order.belongsTo(Customer);Y crea una clave foránea duplicada, tanto el ID_cliente que especifiqué como el ID_cliente como predeterminado. Puedo superar esto al desafiar también la opción foreginKey en la pestaña Pertenece a. Pero incluso entonces tengo este comportamiento extraño que cada vez que ejecuto el servidor "agrega" otro, como en la imagen (de heidiSQL).
He intentado eliminar el campo del método define() como sugirió @tam.teixeira
Y reemplazó el código para que sea:
Customer.hasMany(Order, { foreignKey: "customerID"}); Order.belongsTo(Customer);Pero aún crea 2 foreginKey de esa manera
[![enter code here][2]][2]Tienes que eliminar la definición de
customer_id: { type: DataTypes.INTEGER, allowNull: false, } del modelo de orders , la secuencia maneja automáticamente ese campo, también dado que NOT NULL , debe agregar esa condición a la asociación:
Customer.hasMany(Order, { foreignKey: { name: 'customer_id', allowNull: false } });