У меня есть пользовательская таблица, в которой есть столбец внешнего ключа для таблицы ролей.
Я определил все отношения в mysql и, используя sequelize-auto
, создал свои модели.
Сгенерированная модель для пользователя была такой:
const user = sequelize.define('user', {
Id: {
type: DataTypes.INTEGER(11),
allowNull: false,
primaryKey: true,
autoIncrement: true,
},
Email: {
type: DataTypes.STRING(45),
allowNull: false,
unique: true,
},
RoleId: {
type: DataTypes.INTEGER(11),
allowNull: false,
references: {
model: 'roles',
key: 'Id',
},
},
});
Я думал, что моя ссылка была установлена таким образом, чтобы, когда я делал следующее в моем преобразователе:
users: async () => {
const users = await db.user.findAll({
include: [
{
model: db.roles,
},
],
});
return users
Я должен был получить список ролей пользователей со следующим запросом на игровой площадке:
{users
{roles
{Name, Id}
}
}
Вместо этого я получил
ролей, не связанных с пользователем!
Позже я понял, что мне нужно было создать ассоциацию:
user.associate = models => {
user.hasMany(models.roles, {
foreignKey: 'Id',
sourceKey: 'RoleId',
onDelete: 'cascade',
});
};
Тогда это сработало.
Что я до сих пор не понимаю, для чего это нужно в пользовательской модели ?:
references: {
model: 'roles',
key: 'Id',
},
Я думал, что это была моя "ассоциация" с таблицей ролей, но я явно не добавил Ассоциация это просто ничего не сделало. Может кто-нибудь объяснить, пожалуйста, значение поля references
?