私は現在2つのMSSQLテーブルを持っています。パレット「バーコード」を含むアイテム「名前」および「パレット」テーブルを含む「アイテム」テーブル。私はこれらの複数のアイテムを複数のパレットにリンクする "ItemPallets"と呼ばれる結合テーブルを持っています。Sequelize Query、多対多関係の問題
"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という名前の3つのアイテムがあり、シリアル番号a400、a401およびa402、パレットDEFにシリアル番号a403の123という名前の最後のアイテムがあることを意味します。
Itemパレットに関連付けられたItemPallet行をすべて取り戻そうとしています。つまり、Item.Pallet [0] .ItemPalletsは配列を含む必要があります。配列には、シリアル番号を含む3つの行a400、a401、a402である。
しかし、私の配列には両方のパレットが含まれていますが、なぜこれらのパレットにはそれぞれシリアル番号が1つしかありませんか?次のように
私が現在使用しているコードは次のとおりです。
models.Item.findOne({
where: {id: 1},
include: [
{ model: models.Pallet }
]
});
申し訳ありませんが、私の間違い。クエリは、実際にはパレットごとに1つずつ、2つの行を返します。これは問題ありませんが、各パレット内のシリアル番号を確認することができます。私はアイテムを照会し、そのアイテムのすべてのシリアル番号を取得する必要があります。 Itemテーブルに固有の他の結合や他のwhere節があるので、これはアイテムテーブルで行う必要があります。 – KittenKiller
はい、私の間違いも 'ItemPallets'に2つの項目があるので2行を返しますが、' Pallet'オブジェクトごとに単一の 'ItemPallet'しか返しません。私は答えを更新して、 'Item'モデルを照会することによってどのようにそれを行うことができるかを示しました – piotrbienias