繁体   English   中英

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

graphQL with Sequelize and Mysql duplicate field in relation

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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模式。 有人像这样麻烦过吗? 提前致谢。

2 个回复

您需要定义外键自定义,因为您没有使用默认主键作为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一样,但适用于两种型号。

2 为什么当GraphQL查询只要求返回对象的某些字段时,MySQL / Sequelize为什么执行全选查询?

对于我的应用程序中的用户,我有一个像这样的简单架构: 我的type-graphql解析器实现了以下简单代码,以返回users列表: 当我执行这样的查询时: 我希望等效的MySQL查询如下所示: SELECT firstName FROM users ,但是相反,我可以看到Sequeliz ...

3 如何使用 sequelize 和 Graphql 正确解析查询 MySql

我正在学习 GraphQL 并尝试通过 GraphQL 上的解析函数中的 sequelize 从 MySql 表中获取数据。 我有一个与宠物表关联的客户表,其中宠物属于客户。 这是我的代码: 使用 findOne 适用于只有一只宠物的客户,或者只返回拥有多只宠物的客户的第一只宠物。 但是,有些客 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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