#mysql #node.js #sequelize.js
#mysql #node.js #sequelize.js
Вопрос:
Я обычно использую PostgreSQL, и это мой первый раз, когда я использую MySQL с Sequelize. Я узнал, что MySQL не поддерживает iLike
, и я пытаюсь преобразовать my iLike
в MySQL дружественный (так сказать).
Мне удалось успешно выполнить приведенное ниже с помощью одного из моих запросов.
where: {
[Op.or]: [
{
name: {
[Op.iLike]: `%${searchTerm || ''}`,
},
},
{
description: {
[Op.iLike]: `%${searchTerm || ''}`,
},
},
],
},
**Converted To**
where: {
[Op.or]: [
Sequelize.where(Sequelize.fn('lower', Sequelize.col('name')), {
[Op.like]: `%${searchTerm || ''}`,
}),
Sequelize.where(Sequelize.fn('lower', Sequelize.col('description')), {
[Op.like]: `%${searchTerm || ''}`,
}),
],
},
С чем я борюсь, так это с преобразованием следующего. Я был бы признателен за любой вклад, который я мог бы получить.
ingredients = ['%salt%', '%pepper%'];
where: {
ingredient: {
[Op.iLike]: {
[Op.any]: ingredients,
},
},
},
SQL - WHERE "Ingredient"."ingredient" ILIKE ANY (ARRAY['%salt%','%pepper%']);
**Attempt to Convert**
where: Sequelize.where(
Sequelize.fn('lower', Sequelize.col('ingredient')),
{
[Op.like]: {
[Op.any]: ingredients,
},
}
),
SQL - WHERE lower(`ingredient`) LIKE ANY ('%salt%', '%pepper%') It seems like ingredients is not passed as an array compared to the above code.
Комментарии:
1.
// In Postgres, Op.like/Op.iLike/Op.notLike can be combined to Op.any: [Op.like]: { [Op.any]: ['cat', 'hat'] } // LIKE ANY ARRAY['cat', 'hat']
Означает ли это, что это только для PG?2. Разве первый пример с
OR
andiLIke
не совпадает со вторым сiLike
andany
?3. Привет, спасибо, что взглянули. Да, это необработанный SQL-запрос, возвращаемый из этого запроса PG. В MySQL
iLike
не работает.4. И в первом примере я проверяю, содержат ли столбцы
name
илиdescription
поисковый запрос. Во втором примере; Я проверяю, есть ли какие-либоingredient
условия поиска в массиве. В основном возвращайте мне все ингредиенты, которые содержат['%salt%', '%pepper%']
. Если я не ошибаюсь[Op.or]
, проверяет несколько столбцов (name
илиdescription
), в то время[Op.any]
как проверяет только один столбецname
, например (верните мне все, чье имя совпадаетJames
, но не будет проверять, содержит ли другой столбецJames
).5. Но вы можете использовать один и тот же столбец
OR
столько раз, сколько длина массива
Ответ №1:
Этот способ сработал для меня, может быть, этот способ поможет вам.
where: {
title: {
[Op.like]: ['%' title '%'],
},
},