2016-01-18 3 views
0

Я пытаюсь создать связь между двумя таблицами. Я получаю ошибку, что таблицы не связаны.Среднее количество стеков -> Sequelize Mysql Association

'use strict'; 

module.exports = function(sequelize, DataTypes) { 

var Product = sequelize.define('Product', { 
     name:    DataTypes.TEXT, 
     description:  DataTypes.TEXT, 
     manufacturer:  DataTypes.CHAR(150), 
     stockCode:   DataTypes.CHAR(150), 
     price:    DataTypes.FLOAT, 
     weight:    DataTypes.FLOAT, 
     stockLevel:   DataTypes.FLOAT, 
     imageUrl:   DataTypes.STRING, 
     category:   DataTypes.CHAR(50), 
     pathId:    DataTypes.INTEGER(11), 
     sku:    DataTypes.CHAR(64), 
     upc:    DataTypes.CHAR(64), 
     ean:    DataTypes.CHAR(64), 
     jan:    DataTypes.CHAR(64), 
     isbn:    DataTypes.CHAR(64), 
     stockStatusId:  DataTypes.INTEGER(11), 
     imageDest:   DataTypes.TEXT, 
     image:    DataTypes.TEXT, 
     points:    DataTypes.INTEGER(8), 
     shipping:   DataTypes.INTEGER(1), 
     dateAvaliable:  DataTypes.DATE, 
     weightClassId:  DataTypes.INTEGER(11), 
     lengthClassId:  DataTypes.INTEGER(11), 
     length:    DataTypes.DECIMAL(15,8), 
     width:    DataTypes.DECIMAL(15,8), 
     height:    DataTypes.DECIMAL(15,8), 
     subtract:   DataTypes.INTEGER(1), 
     minimum:   DataTypes.INTEGER(11), 
     sortOrder:   DataTypes.INTEGER(11), 
     tag:    DataTypes.TEXT, 
     metaTitle:   DataTypes.CHAR(255), 
     metaDescription: DataTypes.CHAR(255), 
     metaKeyword:  DataTypes.CHAR(255), 
     discontinued:  { 
      type   :DataTypes.BOOLEAN, 
      defaultValue : 0 
     }, 
    }, 
    { 
     associate: function(models){ 
      Product.belongsTo(models.Supplier); 
      //Product.hasMany(models.ProductCategoryMatch); 
     } 
    } 
); 

return Product; 

};

и

'use strict'; 

module.exports = function(sequelize, DataTypes) { 

var ProductCategoryMatch = sequelize.define('ProductCategoryMatch', { 
     total:    DataTypes.INTEGER, 
     count:    DataTypes.INTEGER, 
     productId:   DataTypes.INTEGER, 
     // categoryId:   DataTypes.INTEGER, 
    }, 
    { 
     associate: function(models){ 
      ProductCategoryMatch.belongsTo(models.Product, {foreignkey : 'ProductId'}); 
      // ProductCategoryMatch.belongsTo(models.Category, {foreignkey : 'categoryId'}); 
     } 
    } 
); 

return ProductCategoryMatch; 

};

Я уверен, что таблица создания правильно

CREATE TABLE IF NOT EXISTS ProductCategoryMatches (id INTEGER NOT NULL AUTO_INCREMENT, total INTEGER, count INTEGER, ProductId INTEGER, createdAt DATETIME NOT NULL, updatedAt DATETIME NOT NULL, PRIMARY КЛЮЧ (id), ИНОСТРАННЫЙ КЛЮЧ (ProductId) ССЫЛКИ Products (id) ВКЛ. УДАЛИТЬ НЕТ ДЕЙСТВИЙ НА ОБНОВЛЕНИИ CASCADE) ENGINE = InnoDB;

Тогда, когда я пытаюсь найти, я получаю сообщение об ошибке Ошибка: ProductCategoryMatch не связан с продуктом!

/** * Список продуктов и есть категории */ exports.categories = функция (Req, Рез) {

db.Product.findAll({ 
    attributes : [ 
     'name', 
     // 'ProductCategoryMatch.count' 
    ], 
    include : [ 
     { model: db.ProductCategoryMatch } 
    ], 
    // order : [ 

    // ] 
}).then(function(products){ 
    return res.jsonp(products); 
}).catch(function(err){ 
    return res.render(500, { 
     error: err, 
     status: 500 
    }); 
}); 
}; 

ответ

0

Похоже, в коде вы писали выше, связь от продуктов к ProductCategoryMatch закомментирована:

associate: function(models){ 
    Product.belongsTo(models.Supplier); 
    //Product.hasMany(models.ProductCategoryMatch); 
} 

Не уверен, что это только пример кода вы выложили, но способ работы Sequelize ассоциации находится на на основе модели.

Так, ассоциация с Продуктами на ProductCategoryMatch будет работать на включаемый

include: [{ model: db.Product }] 

но вы должны явно добавить ассоциацию к продукту, чтобы сделать включают работу в другую сторону:

include: [{ model: db.ProductCategoryMatch }] 
Смежные вопросы