npm init -y- инициализируем проект nodenpm i sequelize pg pg-hstore- устанавливаем зависимости postgresnpm i -D sequelize-cli- устанавливаем sequelize cli- создаём файл
.sequelizerc:
const path = require('path');
module.exports = {
'config': path.resolve('config', 'config.json'),
'models-path': path.resolve('db', 'models'),
'seeders-path': path.resolve('db', 'seeders'),
'migrations-path': path.resolve('db', 'migrations')
};npx sequelize-cli init- создаём структуру для работы с sequelize- В файле
config.jsonизменили данные для БД (username, password, database, dialect) на свои. Обратите внимание, что мы ввели разные данные для development и test - Для того, чтобы sequelize следил за сидерами (не накатывались те сидеры, которые уже были добавлены в БД, аналогично миграциям),в файл
config.jsonдобавили строчки
"seederStorage": "sequelize",
"seederStorageTableName": "SequelizeData"
- Создали модель командой
npx sequelize-cli model:generate --name User --attributes firstName:string,lastName:string,email:string(изменили под себя)- Одновременно с этим создалась миграция
- Если поменяли что-то в модели - меняем и в миграции
- Накатили миграцию
npx sequelize-cli db:migrate - Создали seeder командой
npx sequelize-cli seed:generate --name demo-user(изменили под себя)
-
Когда пишем seeder, поля
createdAtиupdatedAtнужно заполнить -
Когда пишем seeder, поля
createdAtиupdatedAtнужно заполнить самомуnew Date()
Важно
Если в миграции вы указываете, что какое-то поле таблицы А ссылается на Таблицу В, то на момент накатывания миграции с Таблицей А, уже должна существовать Таблица В. В обратном случае, вы получите ошибку Table_name is not exist.
-
Чтобы создать связь (один ко многим), нужно:
- в модели
Post:
static associate(models) { this.belongsTo(models.User, { foreignKey: 'author', }); }
- в модели
User:
static associate(models) { this.hasMany(models.Post, { foreignKey: 'author', }); }
- в миграции
create-post:
author: { type: Sequelize.INTEGER, allowNull: false, references: { model: { tableName: 'Users', }, key: 'id', }, }
- в модели
Чтобы добвить новое поле в таблицу, нужно:
-
Создать миграцию командой
npx sequelize-cli migration:create --name new_column_in_user -
Изменить миграцию с использованием
JavaScript queryInterface.addColumnи
queryInterface.removeColumn -
Добавить новое поле в модель
User -
Запустить миграцию
npx sequelize-cli db:migrate -
Создать миграцию командой
npx sequelize-cli migration:create --name new_column_in_user
- Изменить миграцию с использованием
JavaScript queryInterface.addColumn
и
queryInterface.removeColumn
- Добавить новое поле в модель
User - Запустить миграцию
npx sequelize-cli db:migrate
Для этого примера создан отдельный файл appMany.js, и отдельная бд, которая описана в файле config.json в части test. Чтобы запустить этот файл, нужно воспользоваться скриптом npm run many
Есть три таблицы: Dogs, Cats и DogsCats. Многие собаки могут дружить с многими кошками. Связь между кошками и собаками описывается в таблице Dogscats.

Таблица 1. Связь Many-to-Many.
-
В модели Dogs нужно описать связь с многими котами через промежуточную таблицу:
this.belongsToMany(Cat, { through: 'Dogscats', foreignKey: 'dog_id' });
-
В модели Cats нужно сделать аналогичную связь:
this.belongsToMany(Dog, { through: 'Dogscats', foreignKey: 'cat_id' });
-
В модели Dogscats ничего делать не нужно
-
В миграции
dogscatsуказываем, что столбцыcat_idиdog_idссылаются на таблицыCatsиDogсоответсвенноdog_id: { type: Sequelize.INTEGER, references: { model: 'Dogs', // tableName key: 'id', }, }, cat_id: { type: Sequelize.INTEGER, references: { model: 'Cats', // tableName key: 'id', }, },
-
В миграциях
CatsиDogsничего делать не нужно
