У меня есть модель пользователя и модель команды, которую я хочу связать.
Пользователь. js Модель
"use strict";
module.exports = sequelize => {
const User = sequelize.define(
"User",
{
id: {
type: Sequelize.UUID,
defaultValue: Sequelize.UUIDV1,
primaryKey: true,
allowNull: false
},
...more fields
}
{ tableName: "Users", timestamps: true }
);
User.associate = function(models) {
// 1 to many with skill
User.hasMany(models.Skill, {
foreignKey: "userId"
});
// 1 to many with team
User.hasMany(models.Team, {
foreignKey: "userId"
});
};
return User;
};
Команда. js Модель
"use strict";
module.exports = (sequelize, DataTypes) => {
const Team = sequelize.define(
"Team",
{
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: DataTypes.INTEGER
},
...more fields
},
{ tableName: "Teams", timestamps: true }
);
Team.associate = function(models) {
Team.belongsTo(models.User, {
foreignKey: "userId"
});
};
return Team;
};
Столбец userId автоматически добавляется в таблицу команды с правильным типом (uuid), но независимо от того, что я пытаюсь, он всегда равен нулю.
Я пытался просто определить без параметров и снова столбец была добавлена, но при создании команды была установлена на ноль.
1). Определите ассоциации без вариантов.
User.associate = function(models) {
User.hasMany(models.Team);
}
Кроме того, у меня есть еще одна таблица «Умения», в которой используется тот же код, но он работает.
"use strict";
module.exports = (sequelize, DataTypes) => {
const Skill = sequelize.define(
"Skill",
{
id: {
type: DataTypes.INTEGER,
allowNull: false,
autoIncrement: true,
primaryKey: true
},
},
{ tableName: "Skills", timestamps: true }
);
Skill.associate = models => {
Skill.belongsTo(models.User, {
foreignKey: "userId"
});
};
return Skill;
};
Это метод, который я использую для создания команды.
// Create a new team
exports.createTeam = async (req, res) => {
// Get the user id from the session
const userId = req.session.passport.user.id;
const { title } = req.body;
// Make sure the user hasn't already created a team with that title.
const existingTeam = await models.Team.findOne({
where: { title: title, userId: userId }
});
if (existingTeam !== null) {
// Response and let the user know.
...
return;
}
const defaultTeamValues = {
title: title,
...
};
// No existing team was found with that title and created by that user.
// Create it.
const team = await models.Team.create(defaultTeamValues);
// Done
res.status(200).json(team);
};
Новая запись в таблице Team, показывающая нулевое значение в столбце внешнего ключа (userId).
Я использую pgAdmin 4 для просмотра таблиц, и каждая таблица имеет правильные ограничения fkeys.
Мне кажется, что я упускаю что-то простое здесь, но я прочитал документы и искал похожие проблемы, но не нашел то, что мне нужно. Что мне не хватает?