Im writing a query where i need multiple 'or' statements.

this is my whereClause:

{
  date_added: {
    '$lte': '2019-04-18', '$gte': '2019-04-11'
  },
  '$or': [ 
    { id: [Array], secondary_id:[Array] }
  ],
  '$and': [ 
    { third_id: [Array], fourth_id:[Array] }
  ],///make it into $or
}

such that there where statements changes from

WHERE ("date_added" <= '2019-04-18' AND "date_added" >= '2019-04-11') 
  AND ("id" IN ('10') or "secondary_id" in ('11')) 
  AND ("third_id" IN ('12') and "fourth_id" in ('13')) 

INTO

WHERE ("date_added" <= '2019-04-18' AND "date_added" >= '2019-04-11') 
  AND ("id" IN ('10') or "secondary_id" in ('11')) 
  AND ("third_id" IN ('12') OR "fourth_id" in ('13')) 

Another way to say it would how could i use sequelize to do (A or B) and (C or D)

1 Answers

0
doublesharp On

You should use the Sequelize operator symbols and not the string values in your example, they have been deprecated. To recreate the query in your SQL, you would want to do something like the following:

const Op = Sequelize.Op

where: {
  date_added: {
    [Op.between]: ['2019-04-18', '2019-04-11'],
  },
  id: {
    [Op.in]: arrayOfIds,
  }
  [Op.or]: [
    {
      channel_type: {
        [Op.like]: {
          [Op.any]: ['facebook', 'instagram'],
        },
      },
    },
  ],
}

SQL

WHERE date_added BETWEEN '2019-04-18' AND '2019-04-11'
  AND id IN (... your id array)
  AND (
    channel_type LIKE 'facebook'
    OR channel_type LIKE 'instagram'
  )