Sequelize MySql эквивалентный запрос ORM

0

У меня такой запрос строки

SELECT d.title
FROM DEALS d
LEFT JOIN USER u ON u.idUser = d.userId 
WHERE ((d.title LIKE  '%gouthamkrishna%' OR d.keywords LIKE  '%gouthamkrishna%')
OR CONCAT(u.firstName,'',u.lastName) LIKE  '%gouthamkrishna%') AND d.isPublic=1

Я хочу создать эквивалентный запрос ORM на основе этого. Вот мой текущий запрос

//deals table
const Deals = require('deals');
//user table
const User = require('user');
Deals.findAndCountAll({
        where:{
            isPublic:1,
            [Op.or]:[
                {title: { $like: '%' + params.keyword + '%' }},
                {keywords: { $like: '%' + params.keyword + '%' }}
            ]
       }, attributes:['title'],
       include:[
        {model:User, required:false,attributes:['firstName'],
        where:Sequelize.where(Sequelize.fn('concat_ws', Sequelize.col('firstName'), ' ', Sequelize.col('lastName')), {
                $like: '%' + params.keyword + '%'
                })

        }]

    })

Но это вернет пустой результат, однако запрос строки возвращает результат

эквивалентный запрос, генерируемый ORM

SELECT 'DEALS'.'idDeal', 'DEALS'.'title', 'USER'.'idUser' AS 'USER.idUser', 'USER'.'firstName' AS 'USER.firstName' FROM 'DEALS' AS 'DEALS' LEFT OUTER JOIN 'USER' AS 'USER' ON 'DEALS'.'userId' = 'USER'.'idUser' AND concat_ws('firstName', ' ', 'lastName') LIKE '%gouthamkrishna%' WHERE ('DEALS'.'title' LIKE '%gouthamkrishna%' OR 'DEALS'.'keywords' LIKE '%gouthamkrishna%') AND 'DEALS'.'isPublic' = 1;
  • 0
    Получение какой-либо ошибки?
  • 0
    Нет ошибок, но я получаю пустые строки, в то время как запрос строки возвращает результаты
Теги:
express
sequelize.js

1 ответ

1
Лучший ответ

Я думаю, вам нужно просто немного изменить запрос, попробуйте следующее:

Deals.findAndCountAll({
    where:{
            isPublic:1,
            [Op.or]:[
                {title: { $like: '%' + params.keyword + '%' }},
                {keywords: { $like: '%' + params.keyword + '%' }},
                Sequelize.where(Sequelize.fn('concat_ws', Sequelize.col('firstName'), ' ', Sequelize.col('lastName')), {
                    $like: '%' + params.keyword + '%'
                })
            ]
    }, 
    attributes:['title'],
    include:[
        {
            model:User, 
            required:false,
            attributes:['firstName'],
    }]
})

Ещё вопросы

Сообщество Overcoder
Наверх
Меню