首页 文章

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

提问于
浏览
0

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总是返回一个错误:

"extensions":{"code":"INTERNAL_SERVER_ERROR","exception":{"name":"SequelizeDatabaseError","parent":{"code":"ER_BAD_FIELD_ERROR","errno":1054,"sqlState":"42S22","sqlMessage":"Unknown column 'casaCodCasa' in 'field list'","sql":“SELECT idcod_casainiciofimpreco_semana AS precoSemanapreco_dia AS precoDiapreco_fimsemana AS precoFimsemanaestadia_minima AS estadiaMinimadescricaoobservacoescreatedAt ,_ updatedAtcasaCodCasa FROM periodo AS periodo WHERE periodo.casaCodCasa = 23;“ },

这个问题似乎与关系定义有关 . 我也很好地定义了解析器和graphQL架构 . 有人像这样有点麻烦吗?提前致谢 .

2 回答

  • 0

    您需要定义外键自定义,因为您没有使用默认主键作为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_uuid添加到用户,所以在你的情况下它的casaCodCasa

  • 1

    Fix在关系/关联ex的定义中包含o自定义外键选项:

    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但两个模特 .

相关问题