2016-11-28 171 views
0

我有一個模型User,它有一個UserSettings與它相關的記錄(一對一)。我想這樣做,以便當我創建一個User它自動UserSettings表中創建一個記錄與默認值。如何自動創建1:1關係?

我嘗試了一大堆鉤子的不同組合(beforeCreate,beforeValidate,afterCreate)。似乎沒有任何工作。

它適用於我調用User.create幷包含UserSettings關係,但我不想傳入默認對象並添加「包含」。

想法?

回答

0

我有一個1:m + n:m的關聯,但我認爲這不會是你的情況的問題。
目前我不知道是否有一個自動功能,但我用這種解決方法。
在我的情況下,它是
重點1:M郎
關鍵N:M產品
在我創建了一個關鍵我去的結果,並與所得到的ID新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)); 
    } 

我希望這可以幫助你。

+0

謝謝。我正在尋找更多的前/後鉤子,每次創建實例時都會這樣做。 – akanieski