繁体   English   中英

与Sequelize和Mysql重复字段有关的graphQL

[英]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 idcod_casainiciofimpreco_semana AS precoSemanapreco_dia AS precoDiapreco_fimsemana AS precoFimsemanaestadia_minima AS estadiaMinima descricaoobservacoescreatedAtupdatedAt ,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.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM