graphQL с Sequelize и Mysql дубликатом поля в отношении - PullRequest
0 голосов
/ 14 ноября 2018

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","исключение": {"имя": "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 ОТ periodo КАК periodo ГДЕ периодо .casaCodCasa = 23; "},

Кажется, проблема в определении отношений.У меня также хорошо определены резольверы и схема graphQL.У кого-нибудь было такое беспокойство?Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Исправление состоит из 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, но для обеих моделей.

0 голосов
/ 14 ноября 2018

Вам необходимо определить пользовательский внешний ключ, поскольку вы не используете первичный ключ по умолчанию в качестве идентификатора

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 </strong>

...