簡體   English   中英

基於 JOIN 結果的 Sequelize 過濾器

[英]Sequelize filter based on JOIN results

我有一個表orders ,它與categories有很多關系。 即一個訂單可以同時擁有foodfruitbanana的類別。

Order.belongsToMany(models.category, { through: 'orderCategory', as: 'categories' });

我想進行查詢以獲取至少具有給定類別之一的所有訂單。 例如,給我所有具有food類別的訂單。 如果我對獲得僅包含 JOIN 中的食物類別的訂單感到滿意,這將很簡單。 但我想包括所有類別,即使其中只有一個匹配。 所以基本上我需要根據左外連接結果過濾值。

我現在的查詢:

order.findAll({
  include: [
    {
      model: models.category,
      as: 'categories',
      where: {
        id: 'a437ffab-5085-4fd7-b193-23dfb299aa39',
      },
      // required: false,
    },
  ],
})

我還嘗試將 where 語句放在父級上。

{ '$categories.id$': 'a437ffab-5085-4fd7-b193-23dfb299aa39' }但我想它本質上是一樣的。

一個想法是在獲取之后進行過濾,但是我將無法進行適當的限制和偏移。

編輯:根據評論的建議,我為此編寫了原始 SQL,這可能會使嘗試將其轉換為 Sequelize 變得更容易。

SELECT
    *
FROM
    orders
    JOIN order_categories ON order_categories.order_id = orders.id
WHERE
    orders.id in(
        SELECT
            order_id FROM order_categories
        WHERE
            order_categories.category_id = 'a437ffab-5085-4fd7-b193-23dfb299aa39')

我不確定這是否是最有效的方法,但它有效。 現在的問題是如何使用 Sequelize 做到這一點。

let we have an order_id with name of order_id. then we can retrive data using this code 

order.findAll({
     where:{id:order_id},
  include: [
    {
      model: models.category,
      as: 'categories',
      where: {
        id: 'a437ffab-5085-4fd7-b193-23dfb299aa39',

      },
      // required: false,
    },
  ],
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM