Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

562
Visualizações
Cómo asociar modelos en la sintaxis de ES6 usando Sequelize v6

Estoy usando Sequelize ORM 6.4.0 y CLI 6.2.0 en una aplicación web express/nuxt. (También: Nodo 14.15.3, npm 6.14.11).

Antecedentes: el objetivo es crear una aplicación web para crear torneos de mariokart y realizar un seguimiento de los datos sobre el rendimiento de los corredores individuales en diferentes pistas, vehículos, etc.

Estoy tratando de crear un modelo de "corredor" que tenga un vehículo predeterminado que sea de la tabla de vehículos. Estoy usando postgres para mis tablas y no tengo problemas para crear o interactuar con mis tablas usando express y sequelize para la API.

Aquí está mi modelo racer.js:

 'use strict' const { Model } = require('sequelize') module.exports = (sequelize, DataTypes) => { class Racer extends Model { /** * Helper method for defining associations. * This method is not a part of Sequelize lifecycle. * The `models/index` file will call this method automatically. */ static associate (models) { // define association here this.belongsTo(models.Vehicle, { foreignKey: 'vehicleName', as: 'defaultVehicle' }) } }; Racer.init({ name: DataTypes.STRING, nickname: DataTypes.STRING }, { sequelize, modelName: 'Racer' }) return Racer }

Mi modelo de vehículo.js:

 'use strict' const { Model } = require('sequelize') module.exports = (sequelize, DataTypes) => { class Vehicle extends Model { /** * Helper method for defining associations. * This method is not a part of Sequelize lifecycle. * The `models/index` file will call this method automatically. */ static associate (models) { // define association here this.hasMany(models.Racer) } }; Vehicle.init({ vehicleName: DataTypes.STRING, vehicleSize: DataTypes.STRING, vehicleClass: DataTypes.STRING, vehicleClass2: DataTypes.STRING, vehicleSpeed: DataTypes.INTEGER, vehicleWeight: DataTypes.INTEGER, vehicleAcceleration: DataTypes.INTEGER, vehicleHandling: DataTypes.INTEGER, vehicleDrift: DataTypes.INTEGER, vehicleOffroad: DataTypes.INTEGER, vehicleMiniturbo: DataTypes.INTEGER }, { sequelize, modelName: 'Vechile' }) return Vehicle }

Cuando veo mis tablas en pgadmin, no veo una columna de vehículo predeterminado y si trato de generar el valor, arrojé "ERROR: la columna "vehículo predeterminado" de la relación "Corredores" no existe"

Intenté jugar con los nombres en caso de que fuera una cosa de mayúsculas/pluralización, pero ese no parece ser el caso. Estoy luchando por encontrar cualquier documentación que ayude, la mayoría de los documentos de secuela están usando la antigua sintaxis .define (estoy intentando esto principalmente porque este es el esqueleto que se genera cuando uso la CLI y parece que las mejores prácticas avanzan) . ¿Qué me estoy perdiendo? Gracias de antemano si pueden ayudar. Me estoy volviendo loco y estoy a punto de omitir las asociaciones de tablas por completo y extraer todos los datos y luego codificar las validaciones manualmente.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Tuve un problema muy similar que resolví usando el archivo de migración. Esto es lo que hice adaptado a las tablas y datos de la pregunta:

En el modelo racer.js:

 static associate (models) { // define association here this.belongsTo(models.Vehicle); // This is to add a VehicleId attribute to Racer to hold the primary key value for Vehicle }

Luego, en el archivo de migración del corredor (llamado algo así como 20210429015612-create-racer.js):

 'use strict'; module.exports = { up: async (queryInterface, Sequelize) => { await queryInterface.createTable('Racers', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER }, name: { type: Sequelize.STRING }, nickname: { type: Sequelize.STRING }, createdAt: { allowNull: false, type: Sequelize.DATE }, updatedAt: { allowNull: false, type: Sequelize.DATE } }); // And here's where the trick takes place: await queryInterface.addColumn( 'Racer', // name of Source model 'VehicleId', // name of the key we're adding { type: Sequelize.INTEGER, references: { model: 'Vehicle', // name of Target model key: 'id', // key in Target model that we're referencing }, onUpdate: 'CASCADE', onDelete: 'SET NULL', } ); }, down: async (queryInterface, Sequelize) => { await queryInterface.dropTable('Racers'); await queryInterface.removeColumn( 'Racers', // name of Source model 'VehicleId' // key we want to remove ); } };

Después de hacer esta modificación tuve que ejecutar en la consola

node_modules/.bin/sequelize db:migrar:deshacer

para ejecutar la función hacia abajo para dejar caer la mesa de los corredores y luego volver a ejecutar

node_modules/.bin/sequelize db:migrar

Y eso es todo, si vuelve a ir a pdAdmin y actualiza las tablas, verá el campo VehicleId en la tabla Racers.

Para obtener más información, consulte el artículo de este tipo.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda