Продолжить запрос mysql, где атрибут равен нулю

#mysql #sequelize.js

#mysql #sequelize.js

Вопрос:

У меня есть адрес, и я хочу посмотреть, есть ли он уже в БД, если нет, создайте новый. Я знаю, что могу использовать findOrCreate() здесь, но давайте упростим и просто проверим, почему я даже не могу найти существующий адрес.

   var address = {
    name: req.body.name,
    address1: req.body.address1,
    address2: req.body.address2,
    zip: req.body.zip,
    city: req.body.city,
    country: req.body.country,
    user_id: req.body.user_id
  };

  Address.find({where: address}).then(function(result){
    console.log(result);
  }).catch(function(err){
    console.error(err);
  });
  

Сгенерированный запрос запрашивает ... AND user_id = NULL , что неверно. Он должен спросить ... AND user_id IS NULL . Как я могу позволить sequelize сделать это правильно для меня? Спасибо.

Ответ №1:

Вы должны просто использовать JavaScript null примитив.

 var address = {
    name: req.body.name,
    address1: req.body.address1,
    address2: req.body.address2,
    zip: req.body.zip,
    city: req.body.city,
    country: req.body.country,
    user_id: req.body.user_id || null
};
  

Это сгенерирует запрос

 ... user_id IS NULL
  

Дополнительная информация

 model.findAll( { where: { some_column : undefined } } );
  

сгенерирует

 ... WHERE `some_column` = NULL
  

Комментарии:

1. Спасибо за ваш ответ, я скоро протестирую это.

2. против. кстати, вы также можете использовать null напрямую: model.findAll( { where: { some_column : null } } );

3. Необходимо использовать «null»