【发布时间】:2017-11-05 02:11:54
【问题描述】:
这里是相关的 Apollo 代码。 (许多数据库字段已被省略,以使其更快/更容易阅读这篇文章。)
连接器
const userAccountsDataModel = db.define('userAccountsData', {
id: {type: Sequelize.STRING, primaryKey: true},
picture_medium: {type: Sequelize.STRING}
});
const associatesDataModel = db.define('associatesData', {
_id: {type: Sequelize.STRING, primaryKey: true},
first_name: {type: Sequelize.STRING},
last_name: {type: Sequelize.STRING},
userID: {type: Sequelize.STRING},
});
associatesDataModel.belongsTo(userAccountsDataModel, {foreignKey: 'userID'});
架构
type userAccountsData {
id: String
picture_medium: String
}
type associatesData {
_id: String
first_name: String
last_name: String
userID: String
userAccountsData: [userAccountsData]
}
查询
const GETONEASSOCIATE_QUERY = gql`
query getOneAssociate($_id: String!) {
getOneAssociate(_id: $_id) {
_id
first_name
last_name
userID
accountsData{
id
picture_medium
}
}
} `;
解析器
getOneAssociate(_, args) {
console.log('in getOneAssociate');
var ret = connectors.associatesData.findAll({
where: args,
include: [connectors.userAccountsData],
logging: console.log
}).then((res) => res.map((item) => item.dataValues));
return ret;
},
解析器通过 Sequelize 生成以下 SQL:
SELECT "associatesData"."_id",
"associatesData"."first_name",
"associatesData"."last_name",
"associatesData"."userID",
"userAccountsDatum"."id" AS "userAccountsDatum.id",
"userAccountsDatum"."picture_medium" AS "userAccountsDatum.picture_medium"
FROM "associatesDatas" AS "associatesData"
LEFT OUTER JOIN "userAccountsData" AS "userAccountsDatum"
ON "associatesData"."userID" = "userAccountsDatum"."id"
WHERE "associatesData"."_id" = '35';
当我在我的 SQL 客户端中运行上述 SQL 时,我可以看到所有搜索的数据都被返回,包括来自相关“userAccountsData”表的数据。
但是,当数据到达我在浏览器中运行 javascript 的客户端代码时,相关表中的数据丢失了——应该包含它的对象为空。
我错过了什么?
提前感谢大家提供任何信息!
【问题讨论】:
-
没有必要做
res.map((item) => item.dataValues)。尝试返回整个res -
虽然不需要
res.map,但返回整个res并不能解决异常。
标签: postgresql sequelize.js graphql apollo apollo-client