具有Sequelize和Mysql重复字段关系的graphQL



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":"从id7 AS periodo中选择CCD_1、cod_casainiciofimpreco_semana AS precoSemanapreco_dia AS precoDiapreco_fimsemana AS precoFimsemanaestadia_minima AS estadiaMinimadescricaoobservacoescreatedAtupdatedAtcasaCodCasa其中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所说,但适用于两种型号。

最新更新