2016-12-17 9 views
1

Я использую SequelizeJS (MySQL) с Passportjs для аутентификации , когда я пишуSequelize.or возвращает Limit 1, а не или результат

User.find(db.Sequelize.or({ 'username': username }, { 'email': req.body.email })) 
      .then((user) => {console.log(user)} 

или

User.find({$or:[({ 'username': username }, { 'email': req.body.email })]}) 

Generats

Выполнение (по умолчанию): SELECT id, name, username, email, password, Picture, role, Description, joinedAt, Social, createdAt, updatedAt ОТ Users AS User LIMIT 1;

Я не понимаю, что произойдет, я использую или генерирует запрос с лимитом 1!

мой пользователь Модель

const bcrypt = require('bcrypt-node'); 
const db = require('../Config/db'); 

module.exports = function() { 
    let DataType = db.Sequelize; 
    let User = db.sequelize.define('User', { 
     name: { type: DataType.STRING, allowNull: false }, 
     username: { type: DataType.STRING, unique: true, allowNull: false }, 
     email: { type: DataType.STRING, unique: true, allowNull: false, validate: { isEmail: true } }, 
     password: { 
      type: DataType.STRING, allowNull: false, set: function (pass) { 
       let newPassword = bcrypt.hashSync(pass); 
       this.setDataValue('password', newPassword); 
      } 
     }, 
     Picture: { type: DataType.STRING, default: '#' }, 
     role: { type: DataType.STRING, default: 'user',allowNull: false }, 
     Description: { type: DataType.TEXT }, 
     joinedAt: { type: DataType.DATE, defaultValue: DataType.NOW }, 
     Social: { type: DataType.TEXT } 
    }, { 
      classMethods: { 
       associate: function (models) { 
        User.hasMany(models.Post); 
       } 
      } 
     }, { 
      instanceMethods: { 
       comparePassword: function (password) { 
        return bcrypt.compareSync(password, this.password); 
       } 
      } 
     }); 

    return User; 
} 

ответ

1

Там нет функции Model.find() в Sequelize, так это выглядит, как вы, вероятно, вызывая Model.findOne(), который применяет LIMIT 1 к вашему запросу. Чтобы найти все результаты, вам необходимо использовать Model.findAll().

Вы должны использовать query operator $ или, но он должен быть внутри элемента where с массивом значений OR. См. Пример ниже.

User.findAll({ 
    where: { 
    $or: [ 
     username: username, 
     email: req.body.email, 
    ], 
    } 
}) 
.then(users => console.log(users)); 
+0

'find' является псевдонимом для' findOne', но теперь работает с тем, где Спасибо, проблема документы не предлагают каких-либо примеров, как это. –

+0

Он должен генерироваться динамически, вы правы, что это не в документах, и я тоже не видел его со статическим анализом. Я бы рекомендовал придерживаться методов в официальных документах. – doublesharp