https://www.graphqlbin.com/v2/gLg9FP
我被这个问题困扰了一天,需要人帮忙。我有两个序列模型
module.exports = (sequelize, DataTypes) => {
const Periodo = sequelize.define('periodo', {
...
cod_casa: {
type: DataTypes.INTEGER(11),
allowNull: false,
field: 'cod_casa'
},
....
},
...
);
Periodo.associate = (models) => {
Periodo.belongsTo(models.casa);
};
return Periodo;
}
和
const Casa = sequelize.define('casa', {
cod_casa: {
type: DataTypes.INTEGER(11),
allowNull: false,
primaryKey: true,
autoIncrement: true,
field: 'cod_casa'
},
.....
Casa.associate = (models) => {
Casa.hasMany(models.periodo);
};
return Casa;
}
但是graphQl总是返回一个错误:
"扩展":{"code":"INTERNAL_SERVER_ERROR","异常":{"name":"SequelizeDatabaseError","父级":{"code":"ER_BAD_FIELD_ERROR","errno":1054,"sqlState":"42S22","sqlMessage":"字段列表中的未知列'casaCodCasa'","sql":"从id
7 AS periodo
中选择CCD_1、cod_casa
、inicio
、fim
、preco_semana
AS precoSemana
、preco_dia
AS precoDia
、preco_fimsemana
AS precoFimsemana
、estadia_minima
AS estadiaMinima
、descricao
、observacoes
、createdAt
、updatedAt
、casaCodCasa其中periodo .
casaCodCasa=23;"},
问题似乎出在关系定义上。我还定义了解析器和graphQL模式。有人这样折磨人吗?提前谢谢。
您需要定义外键自定义,因为您没有使用默认主键作为id
Periodo.belongsTo(models.casa,{foreignKey: 'cod_casa'}); // <--- HERE
根据DOC:
const User = this.sequelize.define('user', {/* attributes */})
const Company = this.sequelize.define('company', {/* attributes */});
User.belongsTo(Company); // Will add companyId to user
const User = this.sequelize.define('user', {/* attributes */}, {underscored: true})
const Company = this.sequelize.define('company', {
uuid: {
type: Sequelize.UUID,
primaryKey: true
}
});
User.belongsTo(Company); // <----- Will add company_uuid to user
注意:User.belongsTo(公司(;//<-----将向用户添加company_uid,因此在您的情况下,它的casaCodCasa
Fix在关系/关联的两个定义中都包含一个自定义外键选项例如:
Periodo.associate = (models) => {
Periodo.belongsTo(models.casa,**{foreignKey: 'cod_casa'}**);
};
和
Casa.associate = (models) => {
Casa.hasMany(models.periodo,**{ foreignKey: 'cod_casa' }**);
Casa.hasMany(models.feedback,{ foreignKey: 'cod_casa' });
};
正如@Vivek Doshi所说,但适用于两种型号。