2013-09-29 11 views
8

समस्या यह है कि मैं संबंध में काम नहीं कर सकता हूं, जो राज्य प्रकार ऑब्जेक्ट को लोड करने में उत्सुक नहीं है।सीक्वेलिज़ एसोसिएशन के पास है, कोई है

सभी प्रश्न मौजूदा टेबल पर किए जाते हैं।

module.exports = function(sequelize, DataTypes) { 

    return sequelize.define('customer', { 

     customer: { 
      type: DataTypes.INTEGER, 
      primaryKey: true, 
      autoIncrement: true, 
      allowNull: true, 
      validate: { 
       isNumeric: true 
      } 
     }, 
     first_name: { 
      type: DataTypes.STRING(100), 
      validate: { 
       isAlphanumeric: true 
      } 
     }, 
     last_name: DataTypes.STRING(100), 
     identity_code: { 
      type: DataTypes.STRING(20), 
      allowNull: true, 
      validate: { 
       isNumeric: true 
      } 
     }, 
     note: DataTypes.STRING(1000), 
     birth_date: DataTypes.DATE, 


     created_by: DataTypes.INTEGER, 
     updated_by: DataTypes.INTEGER, 

     cst_type: DataTypes.INTEGER, 
     cst_state_type: { 
      type: DataTypes.INTEGER, 
     } 

    }, { 
     tableName: 'customer', 

     updatedAt: 'updated', 
     createdAt: 'created', 
     timestamps: true 
    }); 
}; 

cst_state_type तालिका:

module.exports = function(sequelize, DataTypes) { 

    return sequelize.define('StateType', { 

     cst_state_type: { 
      type: DataTypes.INTEGER, 
      primaryKey: true, 
      autoIncrement: true, 
      validate: { 
      } 
     }, 
     name: DataTypes.STRING(100), 
    }, { 
     tableName: 'cst_state_type', 
     timestamps: false 
    }); 
}; 

कैसे संबंधों वर्णित हैं:

global.db.Customer.hasOne(global.db.StateType, { 
    foreignKey: 'cst_state_type', 
    as: 'state_type' 
    }); 

    global.db.StateType.belongsTo(global.db.Customer, { 
    foreignKey: 'cst_state_type' 
    }); 

और उत्सुक बनाने

यहाँ ग्राहक की मेज, cst_state_type क्षेत्र क्या महत्वपूर्ण है लोडिंग क्वेरी:

db.Customer.findAll({ 
     include: [ 
      { model: db.Address, as: 'addresses' }, 
      { model: db.StateType, as: 'state_type' } 
     ] 
    }) 
     .success(function (customers) { 
      res.json(200, customers); 
     }) 
     .fail(function (error) { 
      res.json(500, { msg: error }); 
     }); 

उत्तर

2

मुझे पूरा यकीन है कि त्रुटि कहीं भी आपके संगठनों में है।

global.db.Customer.belongsTo(global.db.StateType, { 
    foreignKey: 'cst_state_type', 
    as: 'state_type' 
}); 

global.db.StateType.hasMany(global.db.Customer, { 
    foreignKey: 'cst_state_type' 
}); 

के रूप में मैं इसे समझते हैं, एक ही राज्य, कई ग्राहकों को सौंपा जा सकता इसलिए StateType.hasMany: जिस तरह से आप अपनी तालिका संरचना वर्णित से, संबद्धताएं कुछ इस तरह दिखना चाहिए। ग्राहक से संबंध -> स्टेटटाइप एक "बैक-एक्शनेशन" है, जिसका अर्थ है कि विदेशी कुंजी ग्राहक तालिका में है। इसके लिए आपको belongsTo

18

आपके उत्तर देने के लिए धन्यवाद, इससे मुझे बहुत मदद मिली। आप classmethods का उपयोग करके सीधे अपने मॉडल में संबंध जोड़ सकते हैं। मैंने नीचे एक उदाहरण जोड़ा, उम्मीद है कि यह मदद करता है!

उपयोगकर्ता मॉडल (फ़ाइल)

module.exports = function(sequelize, DataTypes){ 
    var User = sequelize.define(
     'User', { 
      name: { 
       type: DataTypes.STRING, 
       allowNull: false 
      } 
     }, 
     { 
      classMethods:{ 
       associate:function(models){ 
        User.hasMany(models.Comment, { foreignKey: 'userId'}); 
       } 
      } 
     } 

    ); 
    return User; 
}; 

टिप्पणी मॉडल (फाइल):

module.exports = function(sequelize, DataTypes){ 
    var Comment = sequelize.define(
     'Comment', { 
      text: { 
       type: DataTypes.STRING, 
       allowNull: false 
      } 
     }, 
     { 
      classMethods:{ 
       associate:function(models){ 
        Comment.belongsTo(models.User, { foreignKey:'userId'}); 
       } 
      } 
     } 

    ); 
    return Comment; 
}; 

आप foreignkey स्थापित करने के लिए नहीं है, sequelize यदि आपने यह संभाल लेंगे विदेशीकी निर्दिष्ट नहीं है।

फिर क्वेरी में

:

models.Comment.find({ 
     where: { id: id }, 
     include: [ 
      models.User 
     ], 
     limit: 1 
    }) 
+0

उत्कृष्ट उदाहरण! सरल और कार्यात्मक। –

संबंधित मुद्दे