2015-05-05 13 views
7

İki Model ile ilgili, Katalog ve Ürün Kategorisi var. İkincisinin oluşturduğu bir PK, 'id, language_id' var. İşte basitleştirilmiş modeller şunlardır:Sequelize: 'Bir' ebeveyn tarafından modele göre filtreleme Model özniteliği

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'}); 

Ben ancak YALNIZCA Dil_Kimliği maçları, Katalog ilişkin ProductCategory tablodan biraz bilgi içerecek şekilde çalışıyorum.

Şu anda her iki tablodan olası tüm eşleşmeleri alıyorum. Bu sorgu şu anda: Her iki model de aynı dile sahip nereye dahil filtrelemek için Katalog, bir özellik kullanmak için bir yol

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

var mı?

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

cevap

7

Sequelize için ekstra bir operatöre $col sağlamaktadır: Bu, bu hile yapmak gibi görünüyor

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

Test edildi ve bir çekicilik gibi çalışıyor, kendime yardımcı olduğum için geliştirdiğiniz için teşekkürler. ;) –

2

: Bu arada

, ben de herhangi consecuence olmadan, nereye caluse değişen denedim Bu durumda, sequelize.literal('...')'u (daha fazla kesmek) kullanmanız gerekmez. Örnekte

kullanım şu şekilde görünecektir: Bu çalışma yaptı

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

? 'sequelize.literal ('Sale.debt') kullanarak bu tuhaf şeyi yapar:' 'Payments'.'quantity' =' val' = \ 'Sale.debt \' '' –

+1

@dan_rocha: İç mekanın değiştirilmesi ** nerede * * Başlangıçta yayınlandım ** Catalog.find ** sorgusunda. Yapmaya çalıştığınız şeyi paylaşırsanız size yardımcı olabilirim. Çıktı gerçekten tuhaf ama işe yarıyor. –

İlgili konular