Как составить ассоциацию squelize один к одному?

Для создания ассоциации "один к одному" в Sequelize, необходимо использовать методы hasOne и belongsTo.

Допустим, у нас есть две таблицы в базе данных MySQL: Users и Profiles, и мы хотим установить ассоциацию "один пользователь имеет один профиль".

Сначала, мы должны определить модели для этих таблиц с помощью Sequelize. Для таблицы Users это может выглядеть следующим образом:

const User = sequelize.define('User', {
  username: DataTypes.STRING,
  email: DataTypes.STRING
});

Для таблицы Profiles:

const Profile = sequelize.define('Profile', {
  firstName: DataTypes.STRING,
  lastName: DataTypes.STRING,
  age: DataTypes.INTEGER
});

Затем, мы можем определить ассоциацию между этими таблицами с помощью методов hasOne и belongsTo:

User.hasOne(Profile, { foreignKey: 'userId' });
Profile.belongsTo(User, { foreignKey: 'userId' });

В приведенном выше коде, мы указываем, что модель User имеет одну запись в модели Profile, и что модель Profile принадлежит модели User. Мы также указываем поле userId в качестве внешнего ключа, которое используется для связи между этими таблицами.

После определения ассоциации, Sequelize автоматически создаст методы для доступа к связанным данным. Например, у модели User будет метод getProfile, который возвращает связанный профиль пользователя, и метод setProfile, который устанавливает связанный профиль пользователя.

const user = await User.findOne();
const profile = await user.getProfile();
console.log(profile);

const newProfile = await Profile.create({ firstName: 'John', lastName: 'Doe', age: 30 });
await user.setProfile(newProfile);

В приведенном выше примере, мы получаем профиль пользователя с помощью метода getProfile, а затем устанавливаем новый профиль с помощью метода setProfile.

Таким образом, мы создали ассоциацию "один пользователь имеет один профиль" с помощью методов hasOne и belongsTo в Sequelize. Это позволяет связывать данные между таблицами и работать с ними с помощью удобных методов.