如何自动创建1:1的关系?

时间:2016-11-28 23:42:03

标签: sequelize.js

我有一个模型User,其中有一条UserSettings记录与之相关(一对一)。我想这样做,以便当我创建User时,自动UserSettings表格中创建一个默认值的记录。

我尝试了一大堆不同的钩子组合(beforeCreate,beforeValidate,afterCreate)。似乎没什么用。

当我调用User.create并包含UserSettings关系但我不想传递默认对象并添加“include”时,它可以正常工作。

思想?

1 个答案:

答案 0 :(得分:0)

我有一个1:m + n:m协会,但我认为这不是你案件的问题 目前我不知道是否有自动功能,但我使用了这种解决方法 在我的案例中,它是
关键1:m Lang
关键词:m产品
目前我创建了一个Key,我使用了Result,并使用了Resledted ID new Langs创建了 之后用关联产品创建了密钥。

export function create(req, res) {
  return DictKey.create(req.body.body)// Create a Key
    .then((res)=> {
      for (var i = 0; i < req.body.langs.length; i++) {
        DictValue.create({//Create Associated Languages 
          lang_id: req.body.langs[i],
          key_id: res._id
        })
      }
      return res;
    })
    .then((key)=>{
      return key.addProduct(req.body.products);//Create Products
    })
    .then(respondWithResult(res, 201))
    .catch(handleError(res));
}

在模型定义中,您可以设置默认值,因此您不需要传递任何内容。

'use strict';

export default function(sequelize, DataTypes) {
  return sequelize.define('dict_Keys', {
    _id: {
      type: DataTypes.INTEGER,
      allowNull: false,
      primaryKey: true,
      autoIncrement: true
    },
    type: {
      type: DataTypes.INTEGER,
      allowNull:false,
      defaultValue: 0 // DefaultValue if nothing is passed
    },
  },{
    tableName: 'Keys'
  });
}

所以在你的情况下,它可能像

export default function(sequelize, DataTypes) {
  return sequelize.define('UserSettings', {
    _id: {
      type: DataTypes.INTEGER,
      allowNull: false,
      primaryKey: true,
      autoIncrement: true
    },
    YourColumnName: {
      type: DataTypes.WhatYouWant,
      allowNull:CaseYouNeed,
      defaultValue: 0 // DefaultValue if nothing is passed
    }
}


   export function create(req, res) {
      return User.create(req.body)// Create a User
        .then((res)=> {
          UserSettings.create(
           //Create Associated Settings
           //send with Values or without which the DefaultValues will handle
)
          }
          return res;
        })
        .then(respondWithResult(res, 201))
        .catch(handleError(res));
    }

我希望这会对你有所帮助。