【问题标题】:Node.js join query errorNode.js 连接查询错误
【发布时间】:2018-08-22 11:57:29
【问题描述】:

我使用 express.js 和 sequelize,mysql

数据库

A : { id: 1, name: ... }
B : { A_id: 1, name: name1 }, { A_id: 1, name: name2 }

模型/A.js

A.association = models => {
 A.hasMany(models.B, { foreignKey: 'A_id' });
};
const { B } = require('../models');
A.get = _id => {
 return A.findAll({
  where: { id: _id },
  include: [{ model: B }],
 });
};

模型/B.js

B.association = models => {
 B.belongsTo(models.A, { foreignKey: 'A_id' });
};

路由/test.js

A.get(1).then(record => { console.log(record); });

执行查询

SELECT A.id, A.name, B.A_id, B.name
FROM A
LEFT OUTER JOIN B ON A.id = B.A_id
WHERE A.id=1;

结果

应该有 { A_id: 1, name: name2 }

[A: {
 id: 1,
 name: ...,
 Bs: [{ A_id: 1, name: name1 }]
}];

有什么问题?查询很好。它返回数据'name1,name2'

为什么 Sequelize 方法没有得到所有 B 列?

【问题讨论】:

  • 这是由于两个表中的列相同。因此,如果两个表具有相同的列名,请尝试使用别名。

标签: javascript node.js express sequelize.js


【解决方案1】:

这是由于两个表中的列相同。因此,如果两个表具有相同的列名,请尝试使用别名。

应该是这样的。

return A.findAll({
  where: { id: _id },
  include: [{ model: B }, attributes[["name", "nameb"]],
 });

【讨论】:

  • 感谢您的评论 :) 但它不起作用。我修改了。 include: [{ model: B, attributes: [['name': 'bname']] }] 它只是重命名列。不返回 name2。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 2018-01-19
相关资源
最近更新 更多