Associations Sequelize migrations
Mon application utilise actuellement le Sequelize sync()
méthode pour créer la base de données, et je veux le changer pour utiliser les migrations de système.
Un de mes modèle a belongsTo()
associations avec d'autres modèles, et je ne sais pas vraiment comment faire la migration initiale de code de ces associations.
Dois-je créer manuellement la clé étrangère avec des requêtes SQL, ou est-il une des méthodes disponibles?
- Vous souhaitez utiliser les migrations de créer initiale de la structure de base de données ou vous souhaitez mettre à jour votre base de données actuelle de la structure à l'aide de migrations?
- Je veux créer la base de données initiale de la structure de la première
Vous devez vous connecter pour publier un commentaire.
Cas 1: initialisation de la Base de
Si votre but est d'ajouter des relations lors de l'initialisation de la structure de base de données, il est préférable de l'utiliser juste
sync
méthode au lieu de les ajouter manuellement à l'aide de migrations. Si vos modèles sont correctement conçus et ont des relations définies, elles seront automatiquement créés lors de l'exécution desync
méthode.Prendre un coup d'oeil à sequelize exprimer exemple. Dans le répertoire des modèles, vous avez trois fichiers:
index.js
- qui comprend tous les modèlestask.js
- modèle de tâcheuser.js
de l'utilisateur modèleRegarder
task.js
de contenu, à partir de la ligne 7 le code suivant crée une relation entre l'Utilisateur et de la Tâche modèles:Si vous avez correctement préparer vos relations dans des fichiers de modèle, de la synchronisation de créer les clés étrangères pour vous. Les Migrations ne sont pas nécessaires dans ce cas.
Je vous encourage à lire l'ensemble de l'express-exemple
readme.md
et de parcourir les fichiers du référentiel de voir comment les choses fonctionnent avec express et sequelize.Cas 2: structure de Base de données de migration
Dans le cas où vous avez déjà des données que vous souhaitez conserver, vous devez utiliser le script de migration, parce que la seule façon pour la synchronisation de restructurer votre base de données est de détruire complètement à côté de ses données.
Vous pouvez lire sur la base les migrations dans le sequelize docs. Malheureusement docs ne couvrent pas la création d'une relation. Supposons que vous voulez créer la relation suivante: l'Utilisateur appartient à un Groupe. Pour créer la colonne du côté de l'utilisateur de la relation, vous pouvez utiliser
addColumn
méthode.Malheureusement, il n'y a pas une fonction utile (encore) pour créer la contrainte de clé étrangère pour vous, mais vous pouvez le faire manuellement en utilisant sequelize méthode de requête. Postgresql exemple:
Edit: Ajout d'une structure de base de données de migration cas
sync
).Ajouter cela comme une réponse au lieu d'un commentaire (pas assez rep) pour @aryeh-armon réponse ci-dessus. C'est le nom de la table que vous avez besoin pour vous assurer existe plutôt que le nom du modèle. par exemple, si votre modèle est nommé d'Emploi et votre table db est nommé à l'Emploi, la migration aurait l'air de ressembler à ce lieu.
Après beaucoup de recherche,j'ai trouvé quelques posts expliquant ce que je voulais faire.
Apparemment, il n'est pas vraiment la façon la plus courante de le faire, mais il semble plus logique pour moi. Si vous souhaitez utiliser uniquement les migrations, vous devez utiliser des requêtes SQL pour créer la migration initiale.
Voici les messages : le premier, inspiré par cette une.
Mais de toute façon, je pense que ezrepotein est à droite sur la création de la base de données initiale avec sync, puis de migrer. Il semble plus facile que d'utiliser umzug et utiliser uniquement des migrations.
sequelize db:migrate
, au lieu de quelquesif no db, then db:sync, otherwise db:migrate
genre de chose. Je pense qu'il y a généralement reconnus du mineur préférence pour l'ancien plus tard.vous pouvez ajouter des références aux migrations
Exemple:
Assurez-vous que le modèle que vous référencez existe.