Конвертировать SQL-запрос в Sequelize Query Format - PullRequest
0 голосов
/ 06 июля 2019

Я новичок в Sequelize ORM.Я хотел бы преобразовать SQL-запрос в Sequelize Query.

Это мой SQL-запрос, я хочу преобразовать этот запрос в Sequelize Query:

SELECT * FROM `Posts` AS `Posts` 
    WHERE `Posts`.user_id IN 
        (SELECT `Follows`.receiver_id FROM `follows` AS `Follows` 
            WHERE `Follows`.user_id = user_id and `Follows`.status = "accept");

Я пробовал это, но это не таквернуть любые данные:

Posts
    .findAll({ where: { 
        user_id: { [Op.in]: [{
                include: [{
                    model: Follows,
                    attributes: ['receiver_id'],
                    where: { 
                        user_id: user_id,
                        status:status
                    }
                }]
            }]
        }
    }})
    .then(users => { res.send(users); })

После выполнения вышеуказанного кода выдает ошибку в консоли

SELECT `event_id`, `user_id`, `event_message`, `e_imagepath`, 
    `createdAt`, `updatedAt`, `receiver_id` 
    FROM `Posts` AS `Posts` 
    WHERE `Posts`.`user_id` IN ('[object Object]');

Я хочу преобразовать SQL-запрос в Sequelize Query.

Ответы [ 2 ]

0 голосов
/ 07 июля 2019
This works fine.

router.get('/posts', function(req, res)
{
    const user_id = req.session.user_id;
    const status = "accept";
    Posts.findAndCountAll({include:[{ model: Likes},{ model: Comments},{ model: Users}],
        where:{user_id:{[Op.in]:[sequelize.literal('SELECT `Follows`.receiver_id FROM `follows` AS `Follows` WHERE `Follows`.user_id=1 and `Follows`.status="accept')]}}

        })
    .then((postdata)=>
    {

        Users.findAll({where:{user_id:user_id}})
        .then((userdata)=>
        {
            res.send(postdata.rows)
           // res.render('home',{title:'home',items:postdata.rows,user:userdata});
        }) 
        .catch((err)=>
        {

        })

    })
    .catch((err)=>
    {

    })


});
0 голосов
/ 07 июля 2019

Вы положили свой incude в неправильном положении.Насколько я знаю, у Sequelize нет функции подзапроса.

Поэтому вы можете сделать следующее:

Posts
    .findAll({ where: { user_id: user_id},
               include: [{
                    model: Follows,
                    attributes: ['receiver_id'],
                    where: { 
                        user_id: user_id,
                        status:status
                    }
                }]

    })
    .then(users => { res.send(users); })

Если приведенный выше пример не соответствует вашим потребностям.Вы также можете попробовать использовать подзапрос, смешивая необработанный SQL с Sequelize, как описано ниже по ссылке:

stackoverflow.com / questions / 28286811 / sequelize-subquery-as-field

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...