2015-02-16 3 views
1

У меня есть база данных. Где я есть «user» столsequelize дает неправильное имя таблицы

Я пытаюсь создать свой первый REST API с помощью sequelize

однако, когда он выполняет мой запрос я получаю следующее в консоли:

SELECT `id`, `username`, `password`, `name`, `organization_id`, `type_id`, `join_date` FROM `users` AS `user` WHERE `user`.`id` = '1'; 

как вы может видеть, что он пытается использовать таблицу с именем users, однако эта таблица не существует.

Вот некоторые из моего кода:

Пожалуйста, скажите мне, если вам нужно больше, я не совсем уверен, где это идет не так? : S

var User = sequelize.define('user', { 
    id: DataTypes.INTEGER, 
    username: DataTypes.STRING, 
    password: DataTypes.STRING, 
    name: DataTypes.STRING, 
    organization_id: DataTypes.INTEGER, 
    type_id: DataTypes.INTEGER, 
    join_date: DataTypes.STRING 

}, { 
    instanceMethods: { 
     retrieveAll: function(onSuccess, onError) { 
      User.findAll({}, {raw: true}) 
       .ok(onSuccess).error(onError); 
     }, 
     retrieveById: function(user_id, onSuccess, onError) { 
      User.find({where: {id: user_id}}, {raw: true}) 
       .success(onSuccess).error(onError); 
     }, 
     add: function(onSuccess, onError) { 
      var username = this.username; 
      var password = this.password; 

      var shasum = crypto.createHash('sha1'); 
      shasum.update(password); 
      password = shasum.digest('hex'); 

      User.build({ username: username, password: password }) 
       .save().ok(onSuccess).error(onError); 
     }, 
     updateById: function(user_id, onSuccess, onError) { 
      var id = user_id; 
      var username = this.username; 
      var password = this.password; 

      var shasum = crypto.createHash('sha1'); 
      shasum.update(password); 
      password = shasum.digest('hex'); 

      User.update({ username: username,password: password},{where: {id: id} }) 
       .success(onSuccess).error(onError); 
     }, 
     removeById: function(user_id, onSuccess, onError) { 
      User.destroy({where: {id: user_id}}).success(onSuccess).error(onError); 
     } 
    } 
}); 
+0

Для того чтобы быть ясным, действительно ли таблица «пользователь» уже существует в вашей БД? И вы создали его вручную или Sequelize создавали его? – HeadCode

+0

@HeadCode пользовательская таблица существует в моей базе данных и была создана вручную и уже содержит множество данных –

+0

Я этого не понимал, но «пользователь» выглядит как зарезервированное ключевое слово. Я не могу сказать, что это вызывает у вас проблемы, но посмотрите это сообщение: http://stackoverflow.com/questions/21114499/how-to-make-sequelize-use-singular-table-names – HeadCode

ответ

5

Для решения проблемы вам нужно установить freezeTableName = true внутри объекта options.

например.

var User = sequelize.define('user', { 
    id: DataTypes.INTEGER, 
    username: DataTypes.STRING, 
    password: DataTypes.STRING, 
    name: DataTypes.STRING, 
    organization_id: DataTypes.INTEGER, 
    type_id: DataTypes.INTEGER, 
    join_date: DataTypes.STRING 

}, { 
    freezeTableName = true, 
    instanceMethods: { 
     retrieveAll: function(onSuccess, onError) { 
      User.findAll({}, {raw: true}) 
       .ok(onSuccess).error(onError); 
     }, 
     retrieveById: function(user_id, onSuccess, onError) { 
      User.find({where: {id: user_id}}, {raw: true}) 
       .success(onSuccess).error(onError); 
     }, 
     add: function(onSuccess, onError) { 
      var username = this.username; 
      var password = this.password; 

      var shasum = crypto.createHash('sha1'); 
      shasum.update(password); 
      password = shasum.digest('hex'); 

      User.build({ username: username, password: password }) 
       .save().ok(onSuccess).error(onError); 
     }, 
     updateById: function(user_id, onSuccess, onError) { 
      var id = user_id; 
      var username = this.username; 
      var password = this.password; 

      var shasum = crypto.createHash('sha1'); 
      shasum.update(password); 
      password = shasum.digest('hex'); 

      User.update({ username: username,password: password},{where: {id: id} }) 
       .success(onSuccess).error(onError); 
     }, 
     removeById: function(user_id, onSuccess, onError) { 
      User.destroy({where: {id: user_id}}).success(onSuccess).error(onError); 
     } 
    } 
}); 
+0

WOW ive было так близко к решению этого, что я просто вставил эту строку в неподходящее место, спасибо! –

0

Я не использовал sequelize раньше, но чтение из их документации - может быть вам не хватает -

User.sync({force: true}).then(function() { // Table created return User.create({ firstName: 'John', lastName: 'Hancock' }); });

т.е. создания таблицы части ...

Спасибо

+0

вместо использования table «user» это просто создает таблицу под названием «users» –

Смежные вопросы