Как создать запрос с несколькими или условиями в sequelize - PullRequest
0 голосов
/ 14 января 2020

Я хочу сделать запрос с несколькими или условиями в sequelize. Из двух я определил, что только один отражен в запросе, сгенерированном с помощью секвелирования

Текущий вывод:

SELECT `id`, `from_id`, `to_id`, `message`, `format`, `from_type`, `to_type`, `from_deleted_id`, `to_deleted_id`, `created_at`, `updated_at` FROM `messages` AS `Message` WHERE ((`Message`.`from_id` = '1' AND `Message`.`from_type` = 'user') OR
(`Message`.`from_id` = '3' AND `Message`.`from_type` = 'user'))

Ожидаемый вывод:

SELECT `id`, `from_id`, `to_id`, `message`, `format`, `from_type`, `to_type`, `from_deleted_id`, `to_deleted_id`, `created_at`, `updated_at` FROM `messages` AS `Message` WHERE ((`Message`.`from_id` = '1' AND `Message`.`from_type` = 'user') OR
(`Message`.`from_id` = '3' AND `Message`.`from_type` = 'user')) AND  ((`Message`.`to_id` = '1' AND `Message`.`to_type` = 'user') OR
(`Message`.`to_id` = '3' AND `Message`.`to_type` = 'user'))

где объект -

where_condition={
        [Op.or]: [
            {from_id: from_id,from_type:from_type},
            {from_id: to_id,from_type:to_type},
        ],
         [Op.or]: [
           {to_id: from_id,to_type:from_type},
           {to_id: to_id,to_type:to_type},
         ],

    }

Оператор Sequlize -

models.Message.findAll({where:where_condition})

1 Ответ

0 голосов
/ 14 января 2020

Если объект для множества или условий должен быть следующим:

where_condition={
  [Op.or]: [
        {
          [Op.and]: [
            {
              [Op.and]: [{ from_id: from_id }, { from_type: from_type }]
            },
            {
              [Op.and]: [{ from_id: to_id }, { from_type: to_type }]
            }
          ]
        },
        {
          [Op.and]: [
            {
              [Op.and]: [{ to_id: from_id }, { to_type: from_type }]
            },
            {
              [Op.and]: [{ to_id: to_id }, { to_type: to_type }]
            }
          ]
        }
      ]
}

Надеюсь, это поможет!

...