関連付けによる作成
すべての要素が新規であれば、ネストされた関連付けを持つインスタンスを1ステップで作成できます。
対照的に、ネストされたオブジェクトを含む更新と削除は、現時点では不可能です。そのため、各アクションを個別に明示的に実行する必要があります。
BelongsTo / HasMany / HasOne 関連付け
以下のモデルを考えてみましょう
class Product extends Model {}
Product.init(
  {
    title: Sequelize.STRING,
  },
  { sequelize, modelName: 'product' },
);
class User extends Model {}
User.init(
  {
    firstName: Sequelize.STRING,
    lastName: Sequelize.STRING,
  },
  { sequelize, modelName: 'user' },
);
class Address extends Model {}
Address.init(
  {
    type: DataTypes.STRING,
    line1: Sequelize.STRING,
    line2: Sequelize.STRING,
    city: Sequelize.STRING,
    state: Sequelize.STRING,
    zip: Sequelize.STRING,
  },
  { sequelize, modelName: 'address' },
);
// We save the return values of the association setup calls to use them later
Product.User = Product.belongsTo(User);
User.Addresses = User.hasMany(Address);
// Also works for `hasOne`
新しいProduct、User、および1つ以上のAddressは、次の方法で1ステップで作成できます。
return Product.create(
  {
    title: 'Chair',
    user: {
      firstName: 'Mick',
      lastName: 'Broadstone',
      addresses: [
        {
          type: 'home',
          line1: '100 Main St.',
          city: 'Austin',
          state: 'TX',
          zip: '78704',
        },
      ],
    },
  },
  {
    include: [
      {
        association: Product.User,
        include: [User.Addresses],
      },
    ],
  },
);
Product.create呼び出しにおけるincludeオプションの使用方法に注目してください。Sequelizeが関連付けと共に何をしようとしているのかを理解するために必要です。
注:ここで、ユーザーモデルは小文字のuでuserと呼ばれています。つまり、オブジェクトのプロパティもuserである必要があります。sequelize.defineに与えられた名前がUserだった場合、オブジェクトのキーもUserである必要があります。hasMany関連付けであるため、複数形のaddressesも同様です。
エイリアス付きBelongsTo関連付け
前の例は、関連付けエイリアスをサポートするように拡張できます。
const Creator = Product.belongsTo(User, { as: 'creator' });
return Product.create(
  {
    title: 'Chair',
    creator: {
      firstName: 'Matt',
      lastName: 'Hansen',
    },
  },
  {
    include: [Creator],
  },
);
HasMany / BelongsToMany 関連付け
製品を複数のタグと関連付ける機能を導入してみましょう。モデルの設定は次のようになります。
class Tag extends Model {}
Tag.init(
  {
    name: Sequelize.STRING,
  },
  { sequelize, modelName: 'tag' },
);
Product.hasMany(Tag);
// Also works for `belongsToMany`.
これで、次のように複数のタグを持つ製品を作成できます。
Product.create(
  {
    id: 1,
    title: 'Chair',
    tags: [{ name: 'Alpha' }, { name: 'Beta' }],
  },
  {
    include: [Tag],
  },
);
また、この例をエイリアスをサポートするように変更することもできます。
const Categories = Product.hasMany(Tag, { as: 'categories' });
Product.create(
  {
    id: 1,
    title: 'Chair',
    categories: [
      { id: 1, name: 'Alpha' },
      { id: 2, name: 'Beta' },
    ],
  },
  {
    include: [
      {
        association: Categories,
        as: 'categories',
      },
    ],
  },
);