8.2 KiB
Méthodes disponibles sur l'objet Article (Sequelize)
Ce document liste toutes les méthodes automatiquement générées par Sequelize pour le modèle Article en fonction des associations définies dans src/database/relationships/index.js.
Associations Many-to-Many (belongsToMany)
1. Tags via TagList
Association alias: articleTags
Clés: foreignKey: "articleId", otherKey: "tagName"
article.getArticleTags() // Récupère tous les tags
article.setArticleTags([...]) // Définit les tags
article.addArticleTag(tag) // Ajoute un tag
article.addArticleTags([...]) // Ajoute plusieurs tags
article.removeArticleTag(tag) // Retire un tag
article.removeArticleTags([...]) // Retire plusieurs tags
article.countArticleTags() // Compte les tags
article.hasArticleTag(tag) // Vérifie si le tag est lié
article.hasArticleTags([...]) // Vérifie si les tags sont liés
// Alias généré par Sequelize (correspond à belongsToMany):
// Nom de la clé étrangère singularisée + pluralisé = "ArticleTag(s)" => "addTagList", "getTagList", etc.
article.addTagList(tag) // Ajoute un tag via l'alias
article.addTagLists([...]) // Ajoute plusieurs tags via l'alias
article.getTagLists() // Récupère les tags via l'alias
article.setTagLists([...]) // Définit les tags via l'alias
article.removeTagList(tag) // Retire un tag via l'alias
article.removeTagLists([...]) // Retire plusieurs tags via l'alias
article.countTagLists() // Compte les tags via l'alias
article.hasTagList(tag) // Vérifie si le tag est lié via l'alias
article.hasTagLists([...]) // Vérifie si les tags sont liés via l'alias
2. Users (Favoris) via Favorite
Association alias: articleFavoriteUsers
Clés: foreignKey: "articleId", otherKey: "userId"
article.getArticleFavoriteUsers() // Récupère les utilisateurs qui ont favorisé
article.setArticleFavoriteUsers([...]) // Définit les utilisateurs
article.addUserIdUser(user) // Ajoute un utilisateur
article.addArticleFavoriteUsers([...]) // Ajoute plusieurs utilisateurs
article.removeUserIdUser(user) // Retire un utilisateur
article.removeArticleFavoriteUsers([...]) // Retire plusieurs utilisateurs
article.countArticleFavoriteUsers() // Compte les utilisateurs
article.hasUserIdUser(user) // Vérifie si l'utilisateur a favorisé
article.hasArticleFavoriteUsers([...]) // Vérifie si les utilisateurs ont favorisé
Associations One-to-Many (hasMany)
3. Comments
Association alias: comments
Clé étrangère: articleId
article.getComments() // Récupère tous les commentaires
article.setComments([...]) // Définit les commentaires
article.addComment(comment) // Crée/ajoute un commentaire
article.addComments([...]) // Ajoute plusieurs commentaires
article.removeComment(comment) // Retire un commentaire
article.removeComments([...]) // Retire plusieurs commentaires
article.countComments() // Compte les commentaires
article.hasComment(comment) // Vérifie si le commentaire existe
article.hasComments([...]) // Vérifie si les commentaires existent
article.createComment({...}) // Crée un nouveau commentaire
4. Favorites (enregistrements de join)
Association alias: favorites
Clé étrangère: articleId
article.getFavorites() // Récupère les enregistrements Favorite
article.setFavorites([...]) // Définit les favoris
article.addFavorite(favorite) // Ajoute un enregistrement Favorite
article.addFavorites([...]) // Ajoute plusieurs enregistrements
article.removeFavorite(favorite) // Retire un enregistrement Favorite
article.removeFavorites([...]) // Retire plusieurs enregistrements
article.countFavorites() // Compte les enregistrements Favorite
article.hasFavorite(favorite) // Vérifie si le Favorite existe
article.hasFavorites([...]) // Vérifie si les Favorites existent
article.createFavorite({...}) // Crée un nouveau Favorite
5. TagLists (enregistrements de join)
Association alias: tagLists
Clé étrangère: articleId
article.getTagLists() // Récupère les enregistrements TagList
article.setTagLists([...]) // Définit les TagList
article.addTagList(tagList) // Ajoute un enregistrement TagList
article.addTagLists([...]) // Ajoute plusieurs enregistrements
article.removeTagList(tagList) // Retire un enregistrement TagList
article.removeTagLists([...]) // Retire plusieurs enregistrements
article.countTagLists() // Compte les enregistrements TagList
article.hasTagList(tagList) // Vérifie si le TagList existe
article.hasTagLists([...]) // Vérifie si les TagLists existent
article.createTagList({...}) // Crée un nouveau TagList
Associations Belongs-To (hasOne inverse)
6. Author (User)
Association alias: author
Clé étrangère: authorId
article.getAuthor() // Récupère l'auteur
article.setAuthor(user) // Définit l'auteur
article.createAuthor({...}) // Crée un nouvel auteur
Méthodes personnalisées du modèle
Méthodes d'instance définies dans Article.js :
article.toJSONFor() // Retourne un objet JSON formaté
// Format: { id, slug, title, description, body }
Hooks (Triggers)
Article.beforeValidate() // Déclenché avant la validation
// Génère automatiquement un slug basé sur le titre
// Format: slug(`${article.title}`) + '-' + random
Exemples d'utilisation concrets
Ajouter des tags à un article
const article = await Article.findByPk(1);
const tag = await Tag.findByPk('javascript');
await article.addTagList(tag); // Via alias
// ou
await article.addArticleTag(tag); // Via alias généré automatiquement
Récupérer les commentaires d'un article
const article = await Article.findByPk(1);
const comments = await article.getComments();
Obtenir les utilisateurs qui ont favorisé cet article
const article = await Article.findByPk(1);
const fans = await article.getArticleFavoriteUsers();
Créer un commentaire pour un article
const article = await Article.findByPk(1);
const comment = await article.createComment({
body: "Great article!",
authorId: userId
});
Compter les tags
const article = await Article.findByPk(1);
const tagCount = await article.countTagLists();
Notes importantes
-
Noms des méthodes générées : Sequelize génère les noms en fonction du nom de l'association (alias) ou du modèle.
- Si alias est
articleTags→getArticleTags(),addArticleTag(), etc. - Si alias est
tagLists→getTagLists(),addTagList(), etc.
- Si alias est
-
Singulier/Pluriel : Les méthodes
add*acceptent soit un seul élément (singulier) soit un tableau (pluriel). -
Paramètres optionnels : La plupart des méthodes
get*acceptent un paramètreoptionspour personnaliser la requête :article.getComments({ where: { createdAt: { [Op.gte]: someDate } }, limit: 10, offset: 0, order: [['createdAt', 'DESC']] }); -
Transactions : Toutes les opérations CRUD peuvent être encapsulées dans une transaction :
const transaction = await sequelize.transaction(); await article.addTagList(tag, { transaction }); await transaction.commit(); -
Alias vs Nom généré : L'alias défini dans la relation détermine le nom des méthodes générées. Dans ce projet, les alias comme
articleTags,tagListspermettent d'appelergetTagLists(),addTagList(), etc.