0
votes

I have run into a weird error where I receive a message for a pluralization version of my database table and it is being grouped into my sequel query. I scanned my models and routes and couldn't find any instance of a pluralization of my table name, and when I check the database tables the structures do not mention any pluralization. When I log the query, it looks like the pluralization error comes in at this section of the query

FROM images AS images LEFT OUTER JOIN descriptions AS description ON

Here is the full error message:

Unhandled rejection SequelizeDatabaseError: ER_NO_SUCH_TABLE: Table 'assistant.descriptions' doesn't exist

Here is my Images model:

module.exports = function(sequelize, DataTypes){

var Images = sequelize.define('images', {
    pattern: DataTypes.STRING,
    color: DataTypes.STRING,
    imageUrl: DataTypes.STRING,
    imageSource: DataTypes.STRING,
    description_id: DataTypes.INTEGER
}, {
    classMethods: {
        associate: function(db) {
            Images.belongsTo(db.Description, {foreignKey: 'description_id'});
        }
    }
});
    return Images;
}

Here is my Description model: module.exports = function(sequelize, DataTypes) {

var Description = sequelize.define('description', {
    description_id: {
        type: DataTypes.INTEGER,
        primaryKey: true
    },
    color: DataTypes.STRING,
    body: DataTypes.STRING
});
    return Description;
}

Here is how I associate the models in dbIndex:

var Sequelize      = require('sequelize');
var sequelize = new Sequelize("assistant", "admin", "pwd", {
    host: "host",
    port: 3306,
    dialect: 'mysql'
});
var db = {};

db.Description = sequelize.import(__dirname + "/descriptionModel");

db.Images = sequelize.import(__dirname + "/imagesModel");

db.Images.associate(db);

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;

Here is my query:

router.get('/:pattern/:color/result', function(req, res, image){

    console.log(req.params.color);
    console.log(req.params.pattern);

    db.Images.findAll({ 
        where: {
            pattern: req.params.pattern,
            color: req.params.color
        },
        include: [db.Description],
        attributes: ['id', 'pattern', 'color', 'imageUrl', 'imageSource', 'description_id']
    }).then(function(image){
        //console.log(doc.descriptions_id);
        res.render('pages/suit-result.hbs', {
            pattern : req.params.pattern,
            color : req.params.color,
            image : image
            })
        });
});

Here is the query before the error:

Executing (default): SELECT `images`.`id`, `images`.`pattern`, `images`.`color`, `images`.`imageUrl`, `images`.`imageSource`, `images`.`description_id`, `description`.`description_id` AS `description.description_id`, `description`.`color` AS `description.color`, `description`.`body` AS `description.body`, `description`.`createdAt` AS `description.createdAt`, `description`.`updatedAt` AS `description.updatedAt` FROM `images` AS `images` LEFT OUTER JOIN `descriptions` AS `description` ON `images`.`description_id` = `description`.`description_id` WHERE `images`.`pattern` = 'solid' AND `images`.`color` = 'navy-blue';
1

1 Answers

4
votes

Seqeulize will pluralize your table names by default. To turn it off, include the option freezeTableName: true to all your model definition options that you don't want pluralized. For example, with the Description model:

var Description = sequelize.define('description', {
  description_id: {
    type: DataTypes.INTEGER,
    primaryKey: true
  },
  color: DataTypes.STRING,
  body: DataTypes.STRING
}, {
  freezeTableName: true
});