[英]graphQL with Sequelize and Mysql duplicate field in relation
https://www.graphqlbin.com/v2/gLg9FP
我在这个问题上停留了一天,需要别人的帮助。 我有2个续集模型
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总是返回错误:
“扩展名”:{“代码”:“ INTERNAL_SERVER_ERROR”,“例外”:{“名称”:“ SequelizeDatabaseError”,“父”:{“代码”:“ ER_BAD_FIELD_ERROR”,“ errno”:1054,“ sqlState”:“ 42S22”,“ sqlMessage”:““字段列表”中的未知列“ casaCodCasa””,“ sql”:“ SELECT id
, 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 FROM periodo
AS periodo
WHERE 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); // <-----将company_uuid添加到用户,因此在您的情况下为其casaCodCasa
在关系/ association ex的两个定义中,修复均包含一个自定义外键选项:
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 saind一样,但适用于两种型号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.