簡體   English   中英

Sequelize Query,多對多關系問題

[英]Sequelize Query, many to many relationship issue

我目前有兩個MSSQL表。 一個“項目”表,其中包含一個項目“名稱”,一個“托盤”表中包含一個托盤“條形碼”。 我有一個名為“ ItemPallets”的聯接表,該聯接表將多個項目鏈接到多個托盤。

“ ItemPallets”包含項目ID(主鍵)和托盤ID(主鍵),以及“序列號”。

數據的示例可能是:

項目

+ -- + ---- +
| Id | Name |
+ -- + ---- +
| 1  | 123  |
+ -- + ---- +

棘爪

+ -- + ------- +
| Id | Barcode |
+ -- + ------- +
| 1  | ABC     |
| 2  | DEF     |
+ -- + ------- +

ItemPallets

+ -- + ------ + -------- + ------------- +
| Id | ItemId | PalletId | Serial Number |
+ -- + ------ + -------- + ------------- +
| 1  | 1      | 1        | a400          |
| 2  | 1      | 1        | a401          |
| 3  | 1      | 1        | a402          |
| 4  | 1      | 2        | a403          |
+ -- + ------ + -------- + ------------- +

這意味着在托盤ABC中存在三個名稱為123的項目,分別為序列號a400,a401和a402,在托盤DEF中存在一個名稱為123的最終項目,其序列號為a403。

我試圖取回與Item Pallet相關的所有ItemPallet行,即Item.Pallet [0] .ItemPallets應該包含一個數組,並且我希望該數組包含三個行,其序列號為a400,a401和A402。

但是,雖然我的陣列包含兩個托盤,但為什么每個這些托盤都只包含一個序列號?

我當前使用的代碼如下:

models.Item.findOne({
  where: {id: 1},
  include: [
    { model: models.Pallet }
  ]
});

您的代碼生成的查詢返回三行-您可以在whereinclude旁邊的選項中添加raw: true來看到這一點。 我設法得出結論,Sequelize僅考慮了最后返回的行-如果將查詢的order更改為相反,則將獲得序列號為a403的ItemPallets

至於現在,我建議你用另一種方式

models.ItemPallets.findAll({
    where: {
        ItemId: 1
    }
}).then((itemPallets) => {
    // here you get all ItemPallets of Item with id 1
});

我將嘗試找出Sequelize在這種情況下的行為方式,並告訴我是否有用。

編輯

根據您的評論,也有可能通過查詢Item表來執行此操作

models.Item.findByPrimary(1, {
    include: [ models.ItemPallets ]
}).then((itemWithItemPallets) => {
    // here you get (example output) { id: 1, ItemPallets: [{ id: 1, ItemId: 1, PalletId: 1, serialNumber: a400 }, { ... }]
});

上面的查詢確實

`JOIN ItemsPallets ON ItemsPallets.ItemId = Item.id WHERE Item.id = 1`

因此它返回id = 1所有Item ItemPallets

暫無
暫無

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

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