2015-05-05 33 views
7

Tôi có hai Mô hình liên quan, Danh mục và Danh mục sản phẩm. Sau này có PK được tạo, 'id, language_id'. Dưới đây là các mô hình đơn giản:Sắp xếp lại: Bao gồm.địa chỉ lọc theo thuộc tính 'cha' Thuộc tính mô hình

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

Tôi đang cố gắng để bao gồm một số thông tin từ ProductCategory bảng liên quan đến Catalogue, nhưng chỉ khi các trận đấu language_id.

Hiện tại tôi đang nhận được tất cả các kết quả phù hợp có thể có từ cả hai bảng. Đây là câu hỏi ngay bây giờ:

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

Có cách nào để sử dụng một thuộc tính từ Catalogue để lọc bao gồm nơi cả hai mô hình có cùng một ngôn ngữ?

Bằng cách này, tôi cũng đã cố gắng thay đổi caluse nơi, mà không cần bất kỳ consecuence:

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

Trả lời

7

Sequelize cung cấp thêm một nhà điều hành $col cho trường hợp này, do đó bạn không phải sử dụng sequelize.literal('...') (đó là một hack).

Trong ví dụ của bạn sử dụng sẽ trông như thế này:

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

Đã thử nghiệm nó và hoạt động như một sự quyến rũ, cảm ơn sự cải thiện hơn cái tôi tự anser. ;) –

2

Điều này có vẻ này làm các trick:

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

nơi đã làm công việc này? sử dụng 'sequelize.literal ('Sale.debt') làm cho điều kỳ lạ này:' 'Payment'.'quantity' =' val' = \ 'Sale.debt \' '' –

+1

@dan_rocha: Thay thế bên trong ** trong đó * * trong truy vấn ** Catalog.find ** mà ban đầu tôi đã đăng. Nếu bạn chia sẻ những gì bạn đang cố gắng làm tôi có thể giúp bạn. Đầu ra là thực sự kỳ lạ, nhưng nó hoạt động. –

Các vấn đề liên quan