Я использую переход seelize-cli, когда дело доходит до работы с mysql db.
Если я наберу команду
sequelize init
две папки - это созданные models
и migrations
также, если я устанавливаю ассоциации между двумя моделями, например
User.hasMany(Posts)
Мне нужно вручную добавить внешние ключи в файл миграции.
(но не к файлу модели, правильно?)
Кроме того, в файле миграции есть столбцы, такие как created_at, updated_at
но не в файле модели.
Когда дело доходит до использования db.sync();
таких файлов миграции нет, поэтому мне не нужно вручную вводить внешние ключи в файл модели.
Я понимаю, что файлы миграции относятся только к схеме таблицы db, но тогда, что делает фактический файл модели.?
Этот файл модели не имеет ничего общего с таблицей db?
Я понимаю, какие различия между синхронизацией и миграцией (синхронизация удаляет все таблицы, если необходимо установить силу: истина, но не миграцию)
но, возможно, мне не удалось понять, что происходит внутри страны (модель между миграцией)
любой совет будет действительно оценен!
Когда вы используете sequelize-cli, созданные вами столбцы createdAt и updatedAt уже созданы для вас, так как sequelize использует их для обновления таблицы. Вы можете отключить их.
Файл модели sequelize не нуждается в createAt и updatedAt, чтобы определить изменения, как это делается в sequelize.
Вам придется вручную добавить внешний ключ в файл миграции и модель. Файл модели - это ссылка для вашего sequelize для взаимодействия с вашей схемой базы данных.
Он устанавливает параметр для вашего sequelize для запуска запроса в вашу базу данных. Вы можете сказать, что файл миграции связан с вашей схемой базы данных, а файл модели обеспокоен тем, какие данные хранятся в вашем db.
Пример рассмотрим таблицу пользователей и ее базовую информацию.
Модель пользователя
module.exports = (sequelize, DataTypes) => {
var Users = sequelize.define('users', {
user_id: {
type: DataTypes.STRING,
primaryKey: true,
},
}, {});
User.associate = function(models) {
Users.hasOne(models.basicinfo, {
foreignKey: 'user_id',
as: 'BasicInfo'
});
};
return Users;
};
Основная информация Модель
module.exports = (sequelize, DataTypes) => {
var basicinfo = sequelize.define('basicinfo', {
first_name: {
type: DataTypes.STRING,
},
last_name: {
type: DataTypes.STRING,
},
};{});
basicinfo.associate = function (models) {
basicinfo.belongsTo(models.users, {
foreignKey: 'user_id',
onDelete: 'CASCADE'
});
};
return basicinfo;
};
Надеюсь, это немного облегчит ваше замешательство, которое вы узнаете больше, когда будете использовать эту замечательную библиотеку.
Здесь мой обновленный ответ с файлами миграции для каждой модели.
пользователя миграции
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('users', {
user_id: {
type: Sequelize.STRING,
primaryKey: true,
},
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('users');
}
};
basicinfo-миграция
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('basicinfo', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
user_id: {
type: Sequelize.STRING,
allowNull: false,
unique: true,
onDelete: 'CASCADE',
references: {
model: 'users',
key: 'user_id',
as: 'user_id'
}
},
profile_img: {
type: Sequelize.STRING
},
first_name: {
type: Sequelize.STRING,
},
last_name: {
type: Sequelize.STRING,
},
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('basicinfo');
}
};