2015-05-05 6 views
7

मेरे पास दो मॉडल संबंधित, कैटलॉग और उत्पाद श्रेणी हैं। उत्तरार्द्ध में एक रचनाकृत पीके, 'आईडी, भाषा_आईडी' है। यहाँ मॉडल सरलीकृत कर रहे हैं:अनुक्रमित करें: शामिल करें। जहां 'पैरेंट' मॉडल विशेषता द्वारा फ़िल्टरिंग

var Catalog = sequelize.define("Catalog", { 
id: { 
    type: DataTypes.INTEGER, 
    primaryKey: true, 
    autoIncrement: true 
}, 
user_id: { 
    type: DataTypes.INTEGER, 
    allowNull: false 
}, 
product_category_id: { 
    type: DataTypes.STRING(7) 
}, 
language_id: { 
    type: DataTypes.INTEGER 
}, 
... more stuff ... 
} 

var ProductCategory = sequelize.define("ProductCategory", { 
id: { 
    type: DataTypes.STRING(7), 
    primaryKey: true 
}, 
language_id: { 
    type: DataTypes.INTEGER, 
    primaryKey: true 
}, 
... more stuff ... 
} 

Catalog.belongsTo(models.ProductCategory, {foreignKey: 'product_category_id'}); 

मैं सूची से संबंधित ProductCategory मेज से कुछ जानकारी शामिल करने के लिए कोशिश कर रहा हूँ, लेकिन केवल तभी जब language_id मैचों।

अभी मुझे दोनों टेबलों से सभी संभावित मिलान मिल रहे हैं। इस क्वेरी अभी है:

Catalog.find({where: 
    {id: itemId}, 
    include: { 
     model: models.ProductCategory, 
     where: {language_id: /* Catalog.language_id */} 
    } 
}) 

वहाँ फिल्टर करने के लिए शामिल हैं जहां दोनों मॉडल एक ही भाषा है कैटलॉग से कोई विशेषता का उपयोग करने के लिए एक तरीका है?

वैसे, मैं भी बदल रहा है जहां caluse की कोशिश की है, किसी भी consecuence बिना:

where: {'ProductCategory.language_id': 'Catalog.language_id'} 

उत्तर

7

Sequelize के लिए एक अतिरिक्त ऑपरेटर $col प्रदान करता है इस मामले में आपको sequelize.literal('...') (जो एक हैक है) का उपयोग करने की आवश्यकता नहीं है।

अपने उदाहरण में उपयोग इस प्रकार दिखाई देगा:

Catalog.find({where: 
    {id: itemId}, 
    include: { 
     model: models.ProductCategory, 
     where: { 
      language_id: {$col: 'Catalog.language_id'} 
     } 
    } 
}) 
+0

इसका परीक्षण किया और एक आकर्षण की तरह काम करता है, मेरे आत्म-उत्तर में सुधार के लिए धन्यवाद। ;) –

2

यह इस चाल करना लगता है:

where: {language_id: models.sequelize.literal('Catalog.language_id')} 
+0

जहां इस काम किया है? 'sequelize.literal ('Sale.debt') का उपयोग करके यह अजीब चीज बनती है:' भुगतान '.'quantity' = 'val' = \' Sale.debt \ '' –

+1

@dan_rocha: आंतरिक ** को बदलना * * ** Catalog.find ** क्वेरी में मैंने मूल रूप से पोस्ट किया था। यदि आप जो भी करने की कोशिश कर रहे हैं उसे साझा करते हैं तो मैं आपकी मदद कर सकता हूं। आउटपुट वास्तव में अजीब है, लेकिन यह काम करता है। –

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