{"id":433,"date":"2018-12-30T20:16:58","date_gmt":"2018-12-30T19:16:58","guid":{"rendered":"https:\/\/numa-bord.com\/miniblog\/?p=433"},"modified":"2018-12-30T20:21:13","modified_gmt":"2018-12-30T19:21:13","slug":"nodejs-exemples-dutilisation-avec-lorm-sequelize","status":"publish","type":"post","link":"https:\/\/numa-bord.com\/miniblog\/nodejs-exemples-dutilisation-avec-lorm-sequelize\/","title":{"rendered":"NodeJs : Exemples d&rsquo;utilisation avec l&rsquo;ORM Sequelize"},"content":{"rendered":"<p><a href=\"http:\/\/sequelizejs.com\/\" target=\"_blank\">Sequelize<\/a> est un ORM pour node.js compatible avec diff\u00e9rents moteurs de base de donn\u00e9es comme Mysql, Sqlite&#8230;etc.<br \/>\nDans cet article nous allons survoler quelques cas pratiques permettant de d\u00e9finir le mod\u00e8le de la base, et d&rsquo;effectuer des requ\u00eates dessus.<\/p>\n<p>Une fois <a href=\"http:\/\/docs.sequelizejs.com\/manual\/installation\/getting-started.html\" target=\"_blank\">install\u00e9<\/a> nous allons commencer \u00e0 structurer notre base de donn\u00e9es en cr\u00e9ant les diff\u00e9rents objets la composant. Tout sera situ\u00e9 dans un fichier \u00ab\u00a0Model.js\u00a0\u00bb avec pour commencer les informations de connexion \u00e0 la base (ici de type mysql) : <\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">var<\/span> Sequelize <span class=\"sy0\">=<\/span> require<span class=\"br0\">&#40;<\/span><span class=\"st0\">'sequelize'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw1\">var<\/span> sequelize <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> Sequelize<span class=\"br0\">&#40;<\/span><span class=\"st0\">'database'<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">'username'<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">'password'<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span><br \/>\nhost<span class=\"sy0\">:<\/span> <span class=\"st0\">'localhost'<\/span><span class=\"sy0\">,<\/span><br \/>\ndialect<span class=\"sy0\">:<\/span> <span class=\"st0\">'mysql'<\/span><span class=\"sy0\">,<\/span><br \/>\nlogging<span class=\"sy0\">:<\/span> <span class=\"kw2\">false<\/span><span class=\"sy0\">,<\/span><span class=\"co1\">\/\/passer a true pour voir les diff\u00e9rentes requ\u00eates effectu\u00e9es par l'ORM<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"co1\">\/\/on exporte pour utiliser notre connexion depuis les autre fichiers.<\/span><br \/>\n<span class=\"kw1\">var<\/span> exports <span class=\"sy0\">=<\/span> module.<span class=\"me1\">exports<\/span> <span class=\"sy0\">=<\/span> <span class=\"br0\">&#123;<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><br \/>\nexports.<span class=\"me1\">sequelize<\/span> <span class=\"sy0\">=<\/span> sequelize<span class=\"sy0\">;<\/span><\/div><\/div>\n<p>On va pouvoir cr\u00e9er notre mod\u00e8le, partons sur un cas pratique simple, ou on va avoir des utilisateurs \u00ab\u00a0User\u00a0\u00bb qui ont un r\u00f4le \u00ab\u00a0Role\u00a0\u00bb. On d\u00e9clare les tables et leurs champs de la mani\u00e8re suivante : <\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"coMULTI\">\/**<br \/>\n&nbsp;* ROLE<br \/>\n&nbsp;*\/<\/span><br \/>\n<span class=\"kw1\">const<\/span> Role <span class=\"sy0\">=<\/span> sequelize.<span class=\"me1\">define<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'role'<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; id<span class=\"sy0\">:<\/span> <span class=\"br0\">&#123;<\/span>type<span class=\"sy0\">:<\/span> Sequelize.<span class=\"me1\">INTEGER<\/span><span class=\"sy0\">,<\/span> autoIncrement<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">,<\/span> primaryKey<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; name<span class=\"sy0\">:<\/span> <span class=\"br0\">&#123;<\/span>type<span class=\"sy0\">:<\/span> Sequelize.<span class=\"me1\">STRING<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">255<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> allowNull<span class=\"sy0\">:<\/span> <span class=\"kw2\">false<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span>tableName<span class=\"sy0\">:<\/span> <span class=\"st0\">'role'<\/span><span class=\"sy0\">,<\/span> timestamps<span class=\"sy0\">:<\/span> <span class=\"kw2\">false<\/span><span class=\"sy0\">,<\/span> underscored<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"br0\">&#125;<\/span><span class=\"co1\">\/\/par default &quot;tableName&quot; serait &quot;roles&quot; (au pluriel), &quot;timestamps&quot; cr\u00e9e 2 champs automatique pour les dates de cr\u00e9ation et de modification (tr\u00e8s pratique si n\u00e9cessaire) et &quot;underscored&quot; permet de cr\u00e9er automatiquement des champs de &quot;relation&quot; entre les tables de type &quot;role_id&quot; plut\u00f4t que &quot;UserId&quot;.<\/span><br \/>\n<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nexports.<span class=\"me1\">Role<\/span> <span class=\"sy0\">=<\/span> Role<span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"coMULTI\">\/*<br \/>\n&nbsp;* USER<br \/>\n&nbsp;*\/<\/span><br \/>\n<span class=\"kw1\">const<\/span> User <span class=\"sy0\">=<\/span> sequelize.<span class=\"me1\">define<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'user'<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; id<span class=\"sy0\">:<\/span> <span class=\"br0\">&#123;<\/span>type<span class=\"sy0\">:<\/span> Sequelize.<span class=\"me1\">INTEGER<\/span><span class=\"sy0\">,<\/span> autoIncrement<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">,<\/span> primaryKey<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; name<span class=\"sy0\">:<\/span> <span class=\"br0\">&#123;<\/span>type<span class=\"sy0\">:<\/span> Sequelize.<span class=\"me1\">STRING<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">255<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> allowNull<span class=\"sy0\">:<\/span> <span class=\"kw2\">false<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; email<span class=\"sy0\">:<\/span> <span class=\"br0\">&#123;<\/span>type<span class=\"sy0\">:<\/span> Sequelize.<span class=\"me1\">STRING<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">255<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> allowNull<span class=\"sy0\">:<\/span> <span class=\"kw2\">false<\/span><span class=\"sy0\">,<\/span> unique<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span>tableName<span class=\"sy0\">:<\/span> <span class=\"st0\">'user'<\/span><span class=\"sy0\">,<\/span> timestamps<span class=\"sy0\">:<\/span> <span class=\"kw2\">false<\/span><span class=\"sy0\">,<\/span> underscored<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nexports.<span class=\"me1\">User<\/span> <span class=\"sy0\">=<\/span> User<span class=\"sy0\">;<\/span><\/div><\/div>\n<p>On veux maintenant cr\u00e9er une relation entre ces 2 tables. L&rsquo;utilisateur \u00e0 un et un seul r\u00f4le. Pour cela il suffit d&rsquo;ajouter la ligne suivante : <\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">User.<span class=\"me1\">belongsTo<\/span><span class=\"br0\">&#40;<\/span>Role<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><span class=\"co1\">\/\/l'utilisateur \u00e0 un r\u00f4le.<\/span><\/div><\/div>\n<p>Cela va cr\u00e9er un champ \u00ab\u00a0role_id\u00a0\u00bb dans la table \u00ab\u00a0user\u00a0\u00bb (roleId si on laisse la configuration \u00ab\u00a0underscored\u00a0\u00bb \u00e0 false par default).<br \/>\nPour g\u00e9n\u00e9rer ces tables on peux utiliser la ligne suivante (tables g\u00e9n\u00e9r\u00e9es seulement si elles n&rsquo;existent pas)<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">sequelize.<span class=\"me1\">sync<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span>logging<span class=\"sy0\">:<\/span> console.<span class=\"me1\">log<\/span><span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>Voyons maintenant comment r\u00e9cup\u00e9rer nos donn\u00e9es \u00e0 travers ces objets :<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">&nbsp; &nbsp; <span class=\"co1\">\/\/on importe le mod\u00e8le<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">var<\/span> Model <span class=\"sy0\">=<\/span> require<span class=\"br0\">&#40;<\/span><span class=\"st0\">'.\/Model'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/recherche de tous les utilisateurs<\/span><br \/>\n&nbsp; &nbsp; Model.<span class=\"me1\">User<\/span>.<span class=\"me1\">findAll<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">then<\/span><span class=\"br0\">&#40;<\/span>users <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/on r\u00e9cup\u00e8re ici un tableau &quot;users&quot; contenant une liste d'utilisateurs<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; console.<span class=\"me1\">log<\/span><span class=\"br0\">&#40;<\/span>users<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"kw1\">catch<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw1\">function<\/span> <span class=\"br0\">&#40;<\/span>e<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/gestion erreur<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; console.<span class=\"me1\">log<\/span><span class=\"br0\">&#40;<\/span>e<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>La partie import du mod\u00e8le et gestion des erreurs restant toujours la m\u00eame, ci-dessous des exemple plus concis de diff\u00e9rentes requ\u00eates.<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">&nbsp; &nbsp; <span class=\"co1\">\/\/requ\u00eate avec crit\u00e8re et ordre<\/span><br \/>\n&nbsp; &nbsp; Model.<span class=\"me1\">User<\/span>.<span class=\"me1\">findAll<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; where<span class=\"sy0\">:<\/span> <span class=\"br0\">&#123;<\/span>role_id<span class=\"sy0\">:<\/span> <span class=\"nu0\">2<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> <span class=\"co1\">\/\/on veux uniquement ceux qui ont le role &quot;2&quot;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; order<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span><span class=\"br0\">&#91;<\/span><span class=\"st0\">'name'<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">'ASC'<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#93;<\/span> <span class=\"co1\">\/\/classer par ordre alphab\u00e9tique sur le nom<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">then<\/span><span class=\"br0\">&#40;<\/span>users <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"co1\">\/\/traitement termin\u00e9...<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/requ\u00eate d'un utilisateur par son identifiant avec inclusion de la relation &quot;Role&quot;<\/span><br \/>\n&nbsp; &nbsp; let id <span class=\"sy0\">=<\/span> &nbsp;<span class=\"nu0\">19<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/id<\/span><br \/>\n&nbsp; &nbsp; Model.<span class=\"me1\">User<\/span>.<span class=\"me1\">findById<\/span><span class=\"br0\">&#40;<\/span>id<span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; include<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span><span class=\"br0\">&#123;<\/span>model<span class=\"sy0\">:<\/span> Model.<span class=\"me1\">Role<\/span><span class=\"br0\">&#125;<\/span><span class=\"br0\">&#93;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">then<\/span><span class=\"br0\">&#40;<\/span>user <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/on peux directement afficher le nom du r\u00f4le de l'utilisateur<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; console.<span class=\"me1\">log<\/span><span class=\"br0\">&#40;<\/span>user.<span class=\"me1\">role<\/span>.<span class=\"me1\">name<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/exemple de cr\u00e9ation d'un utilisateur, puis de sa suppression dans la foul\u00e9e. Ce qui permet de voir comment effectuer des requ\u00eates successives.<\/span><br \/>\n&nbsp; &nbsp; Model.<span class=\"me1\">User<\/span>.<span class=\"me1\">create<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; name<span class=\"sy0\">:<\/span> <span class=\"st0\">'Test'<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; email <span class=\"sy0\">:<\/span> <span class=\"st0\">'test@testmail.com'<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">then<\/span><span class=\"br0\">&#40;<\/span>user <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> user.<span class=\"me1\">destroy<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">then<\/span><span class=\"br0\">&#40;<\/span>destroy <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/traitement termin\u00e9...<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"kw1\">catch<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw1\">function<\/span> <span class=\"br0\">&#40;<\/span>e<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/gestion erreur<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/exemple de requ\u00eate d'update d'un utilisateur<\/span><br \/>\n&nbsp; &nbsp; let id <span class=\"sy0\">=<\/span> <span class=\"nu0\">19<\/span><span class=\"sy0\">;<\/span><span class=\"co1\">\/\/id<\/span><br \/>\n&nbsp; &nbsp; Model.<span class=\"me1\">User<\/span>.<span class=\"me1\">update<\/span><span class=\"br0\">&#40;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span>name<span class=\"sy0\">:<\/span> <span class=\"st0\">'Numa'<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span>where<span class=\"sy0\">:<\/span> <span class=\"br0\">&#123;<\/span>id<span class=\"sy0\">:<\/span> id<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#41;<\/span>.<span class=\"me1\">then<\/span><span class=\"br0\">&#40;<\/span>user <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/traitement termin\u00e9...<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>Pour la suite et voir une utilisation un peu plus pouss\u00e9, nous allons apporter des modifications \u00e0 notre mod\u00e8le. Pour l&rsquo;instant on peux r\u00e9cup\u00e9rer le r\u00f4le d&rsquo;un utilisateur, mais on voudrait aussi pouvoir faire l&rsquo;inverse. C&rsquo;est \u00e0 dire, \u00e0 partir d&rsquo;un r\u00f4le connaitre la liste des utilisateurs correspondant. Pour cela il nous faut ajouter une relation \u00ab\u00a0hasMany\u00a0\u00bb : <\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">Role.<span class=\"me1\">hasMany<\/span><span class=\"br0\">&#40;<\/span>User<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>Exemple de requ\u00eate : <\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">&nbsp; &nbsp; <span class=\"co1\">\/\/recuperations des utilisateurs correspondants au diff\u00e9rents r\u00f4les<\/span><br \/>\n&nbsp; &nbsp; Model.<span class=\"me1\">Role<\/span>.<span class=\"me1\">findAll<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span>include<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span><span class=\"br0\">&#123;<\/span>model<span class=\"sy0\">:<\/span> Model.<span class=\"me1\">User<\/span><span class=\"br0\">&#125;<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">then<\/span><span class=\"br0\">&#40;<\/span>roles <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/pour chaque role on peux parcourir la liste des ses utilisateurs<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; roles.<span class=\"me1\">forEach<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>role<span class=\"br0\">&#41;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.<span class=\"me1\">log<\/span><span class=\"br0\">&#40;<\/span>role.<span class=\"me1\">name<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; role.<span class=\"me1\">users<\/span>.<span class=\"me1\">forEach<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>user<span class=\"br0\">&#41;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.<span class=\"me1\">log<\/span><span class=\"br0\">&#40;<\/span>user.<span class=\"me1\">name<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/...<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>Revenons \u00e0 nouveau sur notre mod\u00e8le, et regardons comment indiquer une r\u00e9f\u00e9rence sur la m\u00eame table. Ici nos utilisateurs \u00ab\u00a0Operator\u00a0\u00bb peuvent avoir d&rsquo;autre utilisateurs qui sont leurs \u00ab\u00a0Manager\u00a0\u00bb.<br \/>\nOn veux donc une cl\u00e9 manager_id sur notre table user. Et comme il sera int\u00e9ressants de r\u00e9cup\u00e9rer la liste des \u00ab\u00a0Operators\u00a0\u00bb d&rsquo;un \u00ab\u00a0Manager\u00a0\u00bb nous cr\u00e9ons aussi la liaison inverse \u00ab\u00a0hasMany\u00a0\u00bb, Voici comment faire :<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">User.<span class=\"me1\">hasMany<\/span><span class=\"br0\">&#40;<\/span>User<span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span>foreignKey<span class=\"sy0\">:<\/span> <span class=\"st0\">'manager_id'<\/span><span class=\"sy0\">,<\/span> as<span class=\"sy0\">:<\/span> <span class=\"st0\">'Operators'<\/span><span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><span class=\"co1\">\/\/l'utilisateur peux avoir des &quot;Operators&quot;<\/span><br \/>\nUser.<span class=\"me1\">belongsTo<\/span><span class=\"br0\">&#40;<\/span>User<span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span>foreignKey<span class=\"sy0\">:<\/span> <span class=\"st0\">'manager_id'<\/span><span class=\"sy0\">,<\/span> as<span class=\"sy0\">:<\/span> <span class=\"st0\">'Manager'<\/span><span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><span class=\"co1\">\/\/l'utilisateur peux avoir un &quot;Manager&quot;<\/span><\/div><\/div>\n<p>Ici lors des \u00ab\u00a0include\u00a0\u00bb dans nos requ\u00eates nous devrons r\u00e9p\u00e9ter les \u00e9l\u00e9ments \u00ab\u00a0as\u00a0\u00bb. Nous allons aussi voir que nous pouvons imbriquer ces \u00ab\u00a0include\u00a0\u00bb, et leur appliquer des crit\u00e8res. <\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">&nbsp; &nbsp; Model.<span class=\"me1\">User<\/span>.<span class=\"me1\">findAll<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; include<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/j'inclus les roles de mon utilisateur<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span>model<span class=\"sy0\">:<\/span> Model.<span class=\"me1\">Role<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/mais aussi la liste de ses &quot;Operators&quot; qui ont comme valeur role_id =&quot;1&quot; je r\u00e9cup\u00e9re \u00e9galement leur propre role.<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span>model<span class=\"sy0\">:<\/span> Model.<span class=\"me1\">User<\/span><span class=\"sy0\">,<\/span> as<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Operators&quot;<\/span><span class=\"sy0\">,<\/span> where<span class=\"sy0\">:<\/span> <span class=\"br0\">&#123;<\/span>role_id<span class=\"sy0\">:<\/span> <span class=\"st0\">'149999900000000002'<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> include<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span><span class=\"br0\">&#123;<\/span>model<span class=\"sy0\">:<\/span> Model.<span class=\"me1\">Role<\/span><span class=\"br0\">&#125;<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#93;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">then<\/span><span class=\"br0\">&#40;<\/span>users <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; users.<span class=\"me1\">forEach<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>user<span class=\"br0\">&#41;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.<span class=\"me1\">log<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'----'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.<span class=\"me1\">log<\/span><span class=\"br0\">&#40;<\/span>user.<span class=\"me1\">name<\/span> <span class=\"sy0\">+<\/span> <span class=\"st0\">&quot; : &quot;<\/span> <span class=\"sy0\">+<\/span> user.<span class=\"me1\">role<\/span>.<span class=\"me1\">name<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.<span class=\"me1\">log<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'----'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; user.<span class=\"me1\">Operators<\/span>.<span class=\"me1\">forEach<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>operator<span class=\"br0\">&#41;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.<span class=\"me1\">log<\/span><span class=\"br0\">&#40;<\/span>operator.<span class=\"me1\">name<\/span> <span class=\"sy0\">+<\/span> <span class=\"st0\">&quot; : &quot;<\/span> <span class=\"sy0\">+<\/span> operator.<span class=\"me1\">role<\/span>.<span class=\"me1\">name<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>On peux bien sur aussi effectuer des requ\u00eate brutes, et utiliser l\u2019\u00e9chappement de donn\u00e9es dans celles-ci, voici un exemple : <\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">&nbsp; &nbsp; <span class=\"co1\">\/\/parametre \u00e0 echaper<\/span><br \/>\n&nbsp; &nbsp; let param_name <span class=\"sy0\">=<\/span> <span class=\"st0\">'%a%'<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; let param_role <span class=\"sy0\">=<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/sql brut<\/span><br \/>\n&nbsp; &nbsp; let sql <span class=\"sy0\">=<\/span> <span class=\"st0\">'SELECT (ROUND(id \/ 5)+123) as nimportequoi FROM user WHERE name LIKE $1 AND role_id &gt; $2'<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; Model.<span class=\"me1\">sequelize<\/span>.<span class=\"me1\">query<\/span><span class=\"br0\">&#40;<\/span>sql<span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span>bind<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span>param_name<span class=\"sy0\">,<\/span> param_role<span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span> type<span class=\"sy0\">:<\/span> Model.<span class=\"me1\">sequelize<\/span>.<span class=\"me1\">QueryTypes<\/span>.<span class=\"me1\">SELECT<\/span><span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">then<\/span><span class=\"br0\">&#40;<\/span>results <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; console.<span class=\"me1\">log<\/span><span class=\"br0\">&#40;<\/span>results<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>Ce sera tout pour ce premier article au sujet de nodeJs et Sequelize !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sequelize est un ORM pour node.js compatible avec diff\u00e9rents moteurs de base de donn\u00e9es comme Mysql, Sqlite&#8230;etc. Dans cet article nous allons survoler quelques cas pratiques permettant de d\u00e9finir le mod\u00e8le de la base, et d&rsquo;effectuer des requ\u00eates dessus. Une fois install\u00e9 nous allons commencer \u00e0 structurer notre base de donn\u00e9es en cr\u00e9ant les diff\u00e9rents [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2,11,18,19],"tags":[],"class_list":["post-433","post","type-post","status-publish","format-standard","hentry","category-developpement","category-javascript","category-nodejs","category-sequelize"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>NodeJs : Exemples d&#039;utilisation avec l&#039;ORM Sequelize - Pense b\u00eate d&#039;un d\u00e9veloppeur web<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/numa-bord.com\/miniblog\/nodejs-exemples-dutilisation-avec-lorm-sequelize\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"NodeJs : Exemples d&#039;utilisation avec l&#039;ORM Sequelize - Pense b\u00eate d&#039;un d\u00e9veloppeur web\" \/>\n<meta property=\"og:description\" content=\"Sequelize est un ORM pour node.js compatible avec diff\u00e9rents moteurs de base de donn\u00e9es comme Mysql, Sqlite&#8230;etc. Dans cet article nous allons survoler quelques cas pratiques permettant de d\u00e9finir le mod\u00e8le de la base, et d&rsquo;effectuer des requ\u00eates dessus. Une fois install\u00e9 nous allons commencer \u00e0 structurer notre base de donn\u00e9es en cr\u00e9ant les diff\u00e9rents [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/numa-bord.com\/miniblog\/nodejs-exemples-dutilisation-avec-lorm-sequelize\/\" \/>\n<meta property=\"og:site_name\" content=\"Pense b\u00eate d&#039;un d\u00e9veloppeur web\" \/>\n<meta property=\"article:published_time\" content=\"2018-12-30T19:16:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-12-30T19:21:13+00:00\" \/>\n<meta name=\"author\" content=\"Numa\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Numa\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/numa-bord.com\/miniblog\/nodejs-exemples-dutilisation-avec-lorm-sequelize\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/numa-bord.com\/miniblog\/nodejs-exemples-dutilisation-avec-lorm-sequelize\/\"},\"author\":{\"name\":\"Numa\",\"@id\":\"https:\/\/numa-bord.com\/miniblog\/#\/schema\/person\/f9d00acd1703f17e5a6895283eb46a7e\"},\"headline\":\"NodeJs : Exemples d&rsquo;utilisation avec l&rsquo;ORM Sequelize\",\"datePublished\":\"2018-12-30T19:16:58+00:00\",\"dateModified\":\"2018-12-30T19:21:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/numa-bord.com\/miniblog\/nodejs-exemples-dutilisation-avec-lorm-sequelize\/\"},\"wordCount\":1066,\"commentCount\":1,\"articleSection\":[\"D\u00e9veloppement\",\"Javascript\",\"NodeJs\",\"Sequelize\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/numa-bord.com\/miniblog\/nodejs-exemples-dutilisation-avec-lorm-sequelize\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/numa-bord.com\/miniblog\/nodejs-exemples-dutilisation-avec-lorm-sequelize\/\",\"url\":\"https:\/\/numa-bord.com\/miniblog\/nodejs-exemples-dutilisation-avec-lorm-sequelize\/\",\"name\":\"NodeJs : Exemples d'utilisation avec l'ORM Sequelize - Pense b\u00eate d&#039;un d\u00e9veloppeur web\",\"isPartOf\":{\"@id\":\"https:\/\/numa-bord.com\/miniblog\/#website\"},\"datePublished\":\"2018-12-30T19:16:58+00:00\",\"dateModified\":\"2018-12-30T19:21:13+00:00\",\"author\":{\"@id\":\"https:\/\/numa-bord.com\/miniblog\/#\/schema\/person\/f9d00acd1703f17e5a6895283eb46a7e\"},\"breadcrumb\":{\"@id\":\"https:\/\/numa-bord.com\/miniblog\/nodejs-exemples-dutilisation-avec-lorm-sequelize\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/numa-bord.com\/miniblog\/nodejs-exemples-dutilisation-avec-lorm-sequelize\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/numa-bord.com\/miniblog\/nodejs-exemples-dutilisation-avec-lorm-sequelize\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/numa-bord.com\/miniblog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"NodeJs : Exemples d&rsquo;utilisation avec l&rsquo;ORM Sequelize\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/numa-bord.com\/miniblog\/#website\",\"url\":\"https:\/\/numa-bord.com\/miniblog\/\",\"name\":\"Pense b\u00eate d&#039;un d\u00e9veloppeur web\",\"description\":\"(php, javascript, Symfony, Wordpress....)\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/numa-bord.com\/miniblog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/numa-bord.com\/miniblog\/#\/schema\/person\/f9d00acd1703f17e5a6895283eb46a7e\",\"name\":\"Numa\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/f21d1af4658a7106211915940584534c1e0b3eef3f12eb67a697686cad70b64a?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f21d1af4658a7106211915940584534c1e0b3eef3f12eb67a697686cad70b64a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f21d1af4658a7106211915940584534c1e0b3eef3f12eb67a697686cad70b64a?s=96&d=mm&r=g\",\"caption\":\"Numa\"},\"url\":\"https:\/\/numa-bord.com\/miniblog\/author\/negonner\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"NodeJs : Exemples d'utilisation avec l'ORM Sequelize - Pense b\u00eate d&#039;un d\u00e9veloppeur web","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/numa-bord.com\/miniblog\/nodejs-exemples-dutilisation-avec-lorm-sequelize\/","og_locale":"fr_FR","og_type":"article","og_title":"NodeJs : Exemples d'utilisation avec l'ORM Sequelize - Pense b\u00eate d&#039;un d\u00e9veloppeur web","og_description":"Sequelize est un ORM pour node.js compatible avec diff\u00e9rents moteurs de base de donn\u00e9es comme Mysql, Sqlite&#8230;etc. Dans cet article nous allons survoler quelques cas pratiques permettant de d\u00e9finir le mod\u00e8le de la base, et d&rsquo;effectuer des requ\u00eates dessus. Une fois install\u00e9 nous allons commencer \u00e0 structurer notre base de donn\u00e9es en cr\u00e9ant les diff\u00e9rents [&hellip;]","og_url":"https:\/\/numa-bord.com\/miniblog\/nodejs-exemples-dutilisation-avec-lorm-sequelize\/","og_site_name":"Pense b\u00eate d&#039;un d\u00e9veloppeur web","article_published_time":"2018-12-30T19:16:58+00:00","article_modified_time":"2018-12-30T19:21:13+00:00","author":"Numa","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Numa","Dur\u00e9e de lecture estim\u00e9e":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/numa-bord.com\/miniblog\/nodejs-exemples-dutilisation-avec-lorm-sequelize\/#article","isPartOf":{"@id":"https:\/\/numa-bord.com\/miniblog\/nodejs-exemples-dutilisation-avec-lorm-sequelize\/"},"author":{"name":"Numa","@id":"https:\/\/numa-bord.com\/miniblog\/#\/schema\/person\/f9d00acd1703f17e5a6895283eb46a7e"},"headline":"NodeJs : Exemples d&rsquo;utilisation avec l&rsquo;ORM Sequelize","datePublished":"2018-12-30T19:16:58+00:00","dateModified":"2018-12-30T19:21:13+00:00","mainEntityOfPage":{"@id":"https:\/\/numa-bord.com\/miniblog\/nodejs-exemples-dutilisation-avec-lorm-sequelize\/"},"wordCount":1066,"commentCount":1,"articleSection":["D\u00e9veloppement","Javascript","NodeJs","Sequelize"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/numa-bord.com\/miniblog\/nodejs-exemples-dutilisation-avec-lorm-sequelize\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/numa-bord.com\/miniblog\/nodejs-exemples-dutilisation-avec-lorm-sequelize\/","url":"https:\/\/numa-bord.com\/miniblog\/nodejs-exemples-dutilisation-avec-lorm-sequelize\/","name":"NodeJs : Exemples d'utilisation avec l'ORM Sequelize - Pense b\u00eate d&#039;un d\u00e9veloppeur web","isPartOf":{"@id":"https:\/\/numa-bord.com\/miniblog\/#website"},"datePublished":"2018-12-30T19:16:58+00:00","dateModified":"2018-12-30T19:21:13+00:00","author":{"@id":"https:\/\/numa-bord.com\/miniblog\/#\/schema\/person\/f9d00acd1703f17e5a6895283eb46a7e"},"breadcrumb":{"@id":"https:\/\/numa-bord.com\/miniblog\/nodejs-exemples-dutilisation-avec-lorm-sequelize\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/numa-bord.com\/miniblog\/nodejs-exemples-dutilisation-avec-lorm-sequelize\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/numa-bord.com\/miniblog\/nodejs-exemples-dutilisation-avec-lorm-sequelize\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/numa-bord.com\/miniblog\/"},{"@type":"ListItem","position":2,"name":"NodeJs : Exemples d&rsquo;utilisation avec l&rsquo;ORM Sequelize"}]},{"@type":"WebSite","@id":"https:\/\/numa-bord.com\/miniblog\/#website","url":"https:\/\/numa-bord.com\/miniblog\/","name":"Pense b\u00eate d&#039;un d\u00e9veloppeur web","description":"(php, javascript, Symfony, Wordpress....)","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/numa-bord.com\/miniblog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/numa-bord.com\/miniblog\/#\/schema\/person\/f9d00acd1703f17e5a6895283eb46a7e","name":"Numa","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/f21d1af4658a7106211915940584534c1e0b3eef3f12eb67a697686cad70b64a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f21d1af4658a7106211915940584534c1e0b3eef3f12eb67a697686cad70b64a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f21d1af4658a7106211915940584534c1e0b3eef3f12eb67a697686cad70b64a?s=96&d=mm&r=g","caption":"Numa"},"url":"https:\/\/numa-bord.com\/miniblog\/author\/negonner\/"}]}},"_links":{"self":[{"href":"https:\/\/numa-bord.com\/miniblog\/wp-json\/wp\/v2\/posts\/433","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/numa-bord.com\/miniblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/numa-bord.com\/miniblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/numa-bord.com\/miniblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/numa-bord.com\/miniblog\/wp-json\/wp\/v2\/comments?post=433"}],"version-history":[{"count":17,"href":"https:\/\/numa-bord.com\/miniblog\/wp-json\/wp\/v2\/posts\/433\/revisions"}],"predecessor-version":[{"id":450,"href":"https:\/\/numa-bord.com\/miniblog\/wp-json\/wp\/v2\/posts\/433\/revisions\/450"}],"wp:attachment":[{"href":"https:\/\/numa-bord.com\/miniblog\/wp-json\/wp\/v2\/media?parent=433"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/numa-bord.com\/miniblog\/wp-json\/wp\/v2\/categories?post=433"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/numa-bord.com\/miniblog\/wp-json\/wp\/v2\/tags?post=433"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}