tutorial sequelize findbyid example espaƱol mysql node.js orm sequelize.js

mysql - findbyid - Sequelize.js clave extranjera



sequelize npm (4)

Cuando se usa Sequelize.js, el siguiente código no agrega ninguna clave externa en las tablas.

var MainDashboard = sequelize.define(''main_dashboard'', { title: Sequelize.STRING }, { freezeTableName: true }) MainClient.hasOne(MainDashboard, { foreignKey: ''idClient'' }) MainDashboard.hasOne(MainClient, { foreignKey: ''clientId'' }) sequelize.sync({ force: true })

¿Hay alguna forma de forzar a Sequelize.js a agregar estas restricciones de clave externa?


Antes tenía el mismo problema y se resolvía cuando entendía el funcionamiento de los ajustes Sequelize.

¡Directo al grano!

Supongamos que tenemos dos objetos: Persona y Padre.

var Person = sequelize.define(''Person'', { name: Sequelize.STRING }); var Father = sequelize.define(''Father'', { age: Sequelize.STRING, //The magic start here personId: { type: Sequelize.INTEGER, references: ''persons'', // <<< Note, its table''s name, not object name referencesKey: ''id'' // <<< Note, its a column name } }); Person.hasMany(Father); // Set one to many relationship

Tal vez te ayude

Editar:

Puedes leer esto para entender mejor:

http://docs.sequelizejs.com/en/1.7.0/docs/associations/#foreign-keys


Intenté ejecutar tu código y las filas parecen estar bien creadas:

CREATE TABLE IF NOT EXISTS `main_dashboard` (`title` VARCHAR(255), `id` INTEGER NOT NULL auto_increment , `idClient` INTEGER, PRIMARY KEY (`id`)) ENGINE=InnoDB; CREATE TABLE IF NOT EXISTS `main_client` (`id` INTEGER NOT NULL auto_increment, `clientId` INTEGER, PRIMARY KEY (`id`)) ENGINE=InnoDB;

clientId se agrega a main_client , e idClient se agrega a main_dashboard

Parece que has confundido un poco lo que hace el método hasOne. Cada vez que llama a hasOne se crea una asociación, por lo que su código asocia efectivamente las dos tablas dos veces. El método que estás buscando es belongsTo

Si desea que cada cliente tenga un panel, el código sería el siguiente:

MainClient.hasOne(MainDashboard, { foreignKey: ''clientId'' }) MainDashboard.belongsTo(MainClient, { foreignKey: ''clientId'' })

Esto crea un campo clientId en la tabla main_dashboard, que se relaciona con el campo id de la tabla main_client

Para abreviar, belongsTo agrega la relación a la tabla en la que está invocando el método, hasOne agrega en la tabla que se presenta como argumento.


Necesitas agregar foreignKeyConstraint: true
Tratar

MainClient.hasOne(MainDashboard, { foreignKey: ''idClient'' , foreignKeyConstraint:true })


Para Sequelize 4 esto se ha actualizado a lo siguiente:

const Person = sequelize.define(''Person'', { name: Sequelize.STRING }); const Father = sequelize.define(''Father'', { age: Sequelize.STRING, personId: { type: Sequelize.INTEGER, references: { model: ''persons'', // ''persons'' refers to table name key: ''id'', // ''id'' refers to column name in persons table } } }); Person.hasMany(Father); // Set one to many relationship