web-dev-qa-db-fra.com

Sequelize - insensible à la casse comme

Comment puis-je y parvenir dans Sequelize?

SELECT * FROM table where lower(column) LIKE ('abcd%');

Je ne trouve pas de moyen de mélanger la fonction inférieure avec $ like

11
Facundo Chambo

J'ai trouvé la solution:

Table.findAll({
  attributes: ['createdAt', 'col'],
  where: {
    $and:[
      {
        createdAt:{
          $between:[minDate, maxDate]
        }
      },
      Sequelize.where(
        Sequelize.fn('lower', Sequelize.col('col')),
        {
          $like: 'abcd%'
        }
      )
    ]
  }
});
12
Facundo Chambo

Si vous utilisez PostGres, vous pouvez utiliser l'opérateur $ iLike pour rechercher des lignes (PAS des noms de colonnes comme le demande votre question).

Sequelize Docs

Bien que cela ne réponde pas complètement à votre question, j'espère que cela aidera quelqu'un sur la route qui recherche les insensibles à la casse + Sequelize, ce qui m'a amené ici.

Table.findAll({
    where: {
        createdAt: {
            $between: [minDate, maxDate]
        },
        someOtherColumn: {
            $like: '%mysearchterm%'
        }
    }
})
5
Will Lovett