РЕДАКТИРОВАТЬ:
Я получил небольшой прогресс ... Я изменил отношение на:
Survivor.associate = (models) => {
Survivor.belongsToMany(models.Survivor, { through: models.InfectedsReports, as: 'Reporter', foreignKey: 'ReportedId' })
Survivor.belongsToMany(models.Survivor, { through: models.InfectedsReports, as: 'Reported', foreignKey: 'ReporterId' })
}
и теперь он показывает оба поля правильно, но ввставка значений равна нулю !!!
ОРИГИНАЛЬНЫЙ ВОПРОС:
У меня есть следующие таблицы:
Выжившие:
module.exports = {
up: (queryInterface, DataTypes) => {
return queryInterface.createTable('Survivors', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: DataTypes.INTEGER,
},
name: {
allowNull: false,
type: DataTypes.STRING,
},
gender: {
allowNull: false,
type: DataTypes.ENUM,
values: ['M', 'F']
},
isInfected: {
allowNull: false,
type: DataTypes.BOOLEAN,
defaultValue: 0
},
latitude: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null
},
longitude: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null
},
createdAt: {
allowNull: false,
type: DataTypes.DATE,
},
updatedAt: {
allowNull: false,
type: DataTypes.DATE,
},
})
},
down: (queryInterface) => {
return queryInterface.dropTable('Survivors');
}
};
Заражения, о которых сообщали другие выжившие:
module.exports = {
up: (queryInterface, DataTypes) => {
return queryInterface.createTable('InfectedsReports', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: DataTypes.INTEGER,
},
ReporterId: {
allowNull: false,
type: DataTypes.INTEGER,
references: {
model: 'Survivors',
key: 'id',
}
},
ReportedId: {
allowNull: false,
type: DataTypes.INTEGER,
references: {
model: 'Survivors',
key: 'id',
}
},
});
},
down: (queryInterface) => {
return queryInterface.dropTable('SurvivorsItems');
}
};
И модели:
module.exports = (sequelize, DataTypes) => {
const Survivor = sequelize.define('Survivor', {
name: DataTypes.STRING,
gender: {
type: DataTypes.ENUM,
values: ['M', 'F']
},
isInfected: DataTypes.BOOLEAN,
latitude: DataTypes.STRING,
longitude: DataTypes.STRING,
});
Survivor.associate = (models) => {
Survivor.belongsToMany(models.Survivor, { through: 'InfectedsReports', as: 'Reporter', foreignKey: 'id' })
Survivor.belongsToMany(models.Survivor, { through: 'InfectedsReports', as: 'Reported', foreignKey: 'id' })
}
return Survivor;
module.exports = (sequelize, DataTypes) => {
const InfectedsReports = sequelize.define('InfectedsReports',{
ReporterId: DataTypes.INTEGER,
ReportedId: DataTypes.INTEGER,
}, {
timestamps: false,
});
return InfectedsReports;
}
У меня не было успеха при вставке, потому что ассоциация "многие ко многим":
Выполнение (по умолчанию): INSERT INTO InfectedsReports
(id
) VALUES (DEFAULT);Необработанное отклонение SequelizeForeignKeyConstraintError: Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (zombieresistance
. InfectedsReports
, CONSTRAINT InfectedsReports_ibfk_1
FOREIGN KEY (ReporterId
) ССЫЛКИ Survivors
(id
))
если я удаляю одно объявление ownToMany, появляется один файл, но не другой, а идентификатор во вставке оказывается равным нулю:
controller:
module.exports = {
async create(req, res) {
const { id, idReported } = req.params;
try {
const reporter = await Survivor.findByPk(id)
const reported = await Survivor.findByPk(idReported)
if (null === reported || null === reporter) {
res.status(404).send('Survivor not found')
}
const report = InfectedsReports.create({ idReporter: id, idReported: idReported })
res.send(report)
} catch (e) {
console.log(e)
res.status(500).send(e)
}
},
}
Canкто-нибудь, помогите мне понять, как мне создать самоассоциацию в этой проблеме?
tks ...