.addToCollection()
指定されたコレクションに1つ以上の既存の子レコードを追加します(例:BlogPost #4のcomments
)。
await Something.addToCollection(parentId, association)
.members(childIds);
引数 | 型 | 詳細 | |
---|---|---|---|
1 | parentId | 親レコードの主キー値(ID)。 数値または文字列である必要があります(例: '507f191e810c19729de860ea' または49 )。あるいは、数値または文字列の配列を指定することもできます(例: ['507f191e810c19729de860ea', '14832ace0c179de897'] または[49, 32, 37] )。この場合、すべての子レコードは各親レコードの適切なコレクションに追加されます。 |
|
2 | association | 複数形(「コレクション」)の関連付けの名前(例:「pets」)。 | |
3 | childIds | 追加する子レコードの主キー値(ID)。これは、これらの子レコードを作成するのではなく、指定された親にリンクするだけです。 |
名前 | 型 | いつ発生するか |
---|---|---|
UsageError | 無効な値が渡された場合にスローされます。 | |
AdapterError | データベースアダプタでエラーが発生した場合にスローされます。 | |
Error | 予期しないエラーが発生した場合にスローされます。 |
SailsとWaterlineでのエラー処理の例については、概念 > モデルとORM > エラーを参照してください。
ユーザー3に、「pets」コレクションにペット99と98を追加します。
await User.addToCollection(3, 'pets')
.members([99,98]);
ユーザーレコードが既にそれらのペットのいずれかを「pets」に持っている場合、サイレントにスキップされます。
空の親ID配列が指定された場合、これはno-opです。
親ID(配列として指定されている場合は親IDのいずれか)が実際には既存の永続化されたレコードに対応していない場合、その動作は関連付けの種類によって異なります。
同様に、子IDのいずれかが実際には既存の永続化されたレコードに対応していない場合、
親レコードのコレクションが既にこれらの子の1つ以上をメンバーとして持っている場合、パフォーマンス上の理由から、それらのメンバーシップが再度追跡される可能性があります(例:データベースの結合テーブルに複数回保存されます)。ほとんどの場合、これは問題ありません。通常、将来のクエリに影響を与えないためです(たとえば、関連する親レコードのコレクションを移入する場合、二重に追跡された関係は、子が複数回リストされる結果にはなりません)。重複する結合テーブルレコードを防ぐ必要がある場合は、簡単な回避策があります。MySQLまたはPostgreSQLなどのリレーショナルデータベースを使用している場合は、結合テーブルに複数列のインデックスを作成できます。これにより、このようなクエリはcode: 'E_UNIQUE'
でAdapterErrorが発生します。
- このメソッドは、
await
、プロミスチェーン、または従来のNodeコールバックで使用できます。
- 関連付けが「双方向」(
via
があることを意味する)の場合、子レコードはそれに応じて変更されます。反対側の属性が単数形の場合、各子レコードの外部キーが変更されます。複数形の場合は、各子レコードのコレクションがそれに応じて変更されます。
- さらに、
via
が反対側の単数形(「モデル」)属性を指している場合、.addToCollection()
は必要に応じてこれらの子レコードを「奪います」。たとえば、この複数形(「コレクション」)属性を持つEmployeeモデルがあるとします。involvedInPurchases: { collection: 'Purchase', via: 'cashier' }
。Employee.addToCollection(7, 'involvedInPurchases', [47])
を実行してこの購入を従業員#7(Dolly)に割り当てたとします。しかし、購入#47は既に別の従業員(例:#12、Motoki)に関連付けられていた場合、これはMotokiから購入を「奪い」、Dollyに与えます。つまり、Employee.find([7, 12]).populate('involvedInPurchases')
を実行した場合、DollyのinvolvedInPurchases
配列には購入#47が含まれ、Motokiの配列には含まれません。