![](/img/trans.png)
[英]Sequelize findOne/findAll query not returning association attributes
[英]Sequelize complex join query to use a findAll
所以我想为这5个表建立关系并做一个findAll并从每个表中获取一些信息。 抱歉丑陋的桌子显示
产品表
| Field | Type | Null | Key | Default | Extra |
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| typeId | int(11) unsigned | NO | MUL | NULL | |
| image | varchar(255) | YES | | NULL | |
| desc | text | YES | | NULL | |
| price | float | YES | | NULL | |
| stock | int(11) | YES | | NULL | |
类型表
| Field | Type | Null | Key | Default | Extra |
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
规格表
| Field | Type | Null | Key | Default | Extra |
| productId | int(11) unsigned | NO | PRI | NULL | |
| name | text | YES | | NULL | |
JctProductColors表
| Field | Type | Null | Key | Default | Extra |
| productId | int(11) unsigned | NO | PRI | NULL | |
| colorId | int(11) unsigned | NO | PRI | NULL | |
颜色表
| Field | Type | Null | Key | Default | Extra |
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
这就是我现在的关系
Product.belongsTo(Spec, { "foreignKey": "id", "through": { model: "ProductSpec", unique: false }, "constraints": false }); Spec.belongsTo(Product, { "foreignKey": "productId", "through": { model: "ProductSpec", unique: false }, "constraints": false }); Type.belongsToMany(Product, { "constraints": false, "foreignKey": "id", "through": { model: "ProductType", unique: false } }); Product.belongsTo(Type, { "constraints": false, "foreignKey": "typeId", "through": { model: jctProductColor, unique: false } }); Product.belongsToMany(Color, { "constraints": false, "foreignKey": "productId", "through": { model: jctProductColor, unique: false } }); Color.belongsToMany(Product, { "constraints": false, "foreignKey": "colorId", "through": { model: jctProductColor, unique: false } });
我想创建一个findAll来显示它
select types.name as Type, products.image, products.desc, products.price, products.stock, specs.name as Specs, colors.name as Color from products join types on types.id = products.typeId join specs on products.id = specs.productId join jctproductcolors on jctproductcolors.productId = products.id join colors on colors.id = jctproductcolors.colorid where products.id = :id
我知道你在一年前问过这个问题,但我正在寻找同样的事情,并找到了你未回答的问题。
你可以这样做:
models.Product.findAll({
attributes: ['image', 'desc', 'price', 'stock'],
include: [{
model: models.Type,
attributes: [['name', 'Type']]
}, {
model: models.Specs,
attributes: [['name', 'Specs']]
}, {
model: models.JctProductColors,
include: [{
model: models.Color,
attributes: [['name', 'Color']]
}]
}
],
where: {
id: id
}
});
有关更多信息,请访问:
http://docs.sequelizejs.com/en/latest/docs/querying/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.