{"id":325,"date":"2013-04-20T09:36:51","date_gmt":"2013-04-20T07:36:51","guid":{"rendered":"http:\/\/www.lafabriquedecode.com\/blog\/?p=325"},"modified":"2013-04-20T22:00:54","modified_gmt":"2013-04-20T20:00:54","slug":"doctrine-les-migrations-avec-le-bundle-doctrinemigrationsbundle","status":"publish","type":"post","link":"http:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/doctrine-les-migrations-avec-le-bundle-doctrinemigrationsbundle\/","title":{"rendered":"Doctrine : les migrations avec le bundle DoctrineMigrationsBundle (1\/3)"},"content":{"rendered":"<p>Nous allons voir comment se servir du <em>bundle<\/em> de migrations fourni par <a href=\"http:\/\/www.doctrine-project.org\/projects\/orm.html\" target=\"_blank\">Doctrine<\/a>\u00a0avec Symfony et Composer. Placez vous dans le r\u00e9pertoire qui servira de base \u00e0 cet exercice. Pour ma part j&rsquo;ai choisi la localisation suivante :<\/p>\n<pre>mkdir $HOME\/migrations &amp;&amp; cd $HOME\/migrations<\/pre>\n<p>Nous allons tout d&rsquo;abord installer Composer dans ce r\u00e9pertoire. Bien \u00e9videmment, il vous faudra disposer de <a href=\"http:\/\/curl.haxx.se\/docs\/manpage.html\" target=\"_blank\">curl<\/a>. Si vous ne l&rsquo;avez pas install\u00e9, faites-le de suite :<\/p>\n<pre>sudo apt-get install curl<\/pre>\n<p>Ensuite installez Composer :<\/p>\n<pre>curl -sS https:\/\/getcomposer.org\/installer | php\r\n#!\/usr\/bin\/env php\r\nAll settings correct for using Composer\r\nDownloading...\r\n\r\nComposer successfully installed to: \/home\/sebastien.ferrandez\/migrations\/composer.phar\r\nUse it: php composer.phar<\/pre>\n<p>Maintenant que nous avons Composer install\u00e9, nous allons faire une installation de Symfony via cet outil :<\/p>\n<pre>php composer.phar create-project symfony\/framework-standard-edition Symfony\/ 2.2.1<\/pre>\n<p>Des bundles sont d\u00e9ploy\u00e9s sur votre machine (citons Doctrine, Swiftmailer, Monolog, Assetic) et vous les trouverez en faisant :<\/p>\n<pre>ls -l Symfony\/vendor\/<\/pre>\n<p>Vous vous en doutez, tous ne nous seront pas utiles. Pour nettoyer votre install et garder ce que vous voulez, n&rsquo;h\u00e9sitez pas \u00e0 mettre \u00e0 jour votre fichier composer.json.<br \/>\nPrenons quelques secondes pour regarder ce composer.json g\u00e9n\u00e9r\u00e9 par notre create-project :<\/p>\n<pre>cat Symfony\/composer.json<\/pre>\n<p>Attardons nous sur la partie \u00ab\u00a0require\u00a0\u00bb de notre objet JSON :<\/p>\n<pre>    \"require\": {\r\n        \"php\": \"&gt;=5.3.3\",\r\n        \"symfony\/symfony\": \"2.2.*\",\r\n        \"doctrine\/orm\": \"~2.2,&gt;=2.2.3\",\r\n        \"doctrine\/doctrine-bundle\": \"1.2.*\",\r\n        \"twig\/extensions\": \"1.0.*\",\r\n        \"symfony\/assetic-bundle\": \"2.1.*\",\r\n        \"symfony\/swiftmailer-bundle\": \"2.2.*\",\r\n        \"symfony\/monolog-bundle\": \"2.2.*\",\r\n        \"sensio\/distribution-bundle\": \"2.2.*\",\r\n        \"sensio\/framework-extra-bundle\": \"2.2.*\",\r\n        \"sensio\/generator-bundle\": \"2.2.*\",\r\n        \"jms\/security-extra-bundle\": \"1.4.*\",\r\n        \"jms\/di-extra-bundle\": \"1.3.*\"\r\n    }<\/pre>\n<p>Vous y retrouvez tous les bundles dont vous avez vu d\u00e9filer le nom \u00e0 l&rsquo;installation, c&rsquo;est plut\u00f4t rassurant !<\/p>\n<p>L&rsquo;heure est maintenant venue d&rsquo;installer le <em>bundle<\/em> de migrations Doctrine. Vous \u00eates toujours \u00e0 la racine de votre projet et vous ex\u00e9cutez :<\/p>\n<pre><strong>php composer.phar require doctrine\/doctrine-migrations-bundle dev-master -d Symfony<\/strong>\r\ncomposer.json has been updated\r\nLoading composer repositories with package information\r\nUpdating dependencies (including require-dev)\r\n  - Installing <strong>doctrine\/migrations<\/strong> (v1.0-ALPHA1)\r\n    Downloading: 100%         \r\n\r\n  - Installing <strong>doctrine\/doctrine-migrations-bundle<\/strong> (dev-master 99c0192)\r\n    Cloning 99c0192804134a8c1d0588777bd98bdbc2dbb554<\/pre>\n<p>Vous refaites un :<\/p>\n<pre>cat Symfony\/composer.json<\/pre>\n<p>Pour v\u00e9rifier que votre fichier composer.json a \u00e9t\u00e9 mis \u00e0 jour. Normalement, la partie require devrait maintenant ressembler \u00e0 \u00e7a :<\/p>\n<pre>    \"require\": {\r\n        \"php\": \"&gt;=5.3.3\",\r\n        \"symfony\/symfony\": \"2.2.*\",\r\n        \"doctrine\/orm\": \"~2.2,&gt;=2.2.3\",\r\n        \"doctrine\/doctrine-bundle\": \"1.2.*\",\r\n        \"twig\/extensions\": \"1.0.*\",\r\n        \"symfony\/assetic-bundle\": \"2.1.*\",\r\n        \"symfony\/swiftmailer-bundle\": \"2.2.*\",\r\n        \"symfony\/monolog-bundle\": \"2.2.*\",\r\n        \"sensio\/distribution-bundle\": \"2.2.*\",\r\n        \"sensio\/framework-extra-bundle\": \"2.2.*\",\r\n        \"sensio\/generator-bundle\": \"2.2.*\",\r\n        \"jms\/security-extra-bundle\": \"1.4.*\",\r\n        \"jms\/di-extra-bundle\": \"1.3.*\",\r\n        <strong>\"doctrine\/doctrine-migrations-bundle\": \"dev-master\"<\/strong>\r\n    },<\/pre>\n<p>Si c&rsquo;est le cas, alors vous avez install\u00e9 le bundle avec succ\u00e8s ! Il nous faut cependant faire quelques \u00ab\u00a0r\u00e9glages\u00a0\u00bb; commen\u00e7ons par ajouter notre bundle fra\u00eechement install\u00e9 dans le fichier AppKernel.php<\/p>\n<pre>vi Symfony\/app\/AppKernel.php<\/pre>\n<p>Nous y rajoutons la ligne suivante (vous pouvez laisser la derni\u00e8re virgule car il s&rsquo;agit d&rsquo;une <em>dangling comma<\/em>) :<\/p>\n<pre>new Doctrine\\Bundle\\MigrationsBundle\\DoctrineMigrationsBundle(),<\/pre>\n<p>Ensuite il nous faut \u00e9videmment renseigner nos param\u00e8tres d&rsquo;acc\u00e8s \u00e0 la base de donn\u00e9es afin que Doctrine puisse s&rsquo;y connecter et donc faire :<\/p>\n<pre>vi Symfony\/app\/config\/parameters.yml<\/pre>\n<p>Vous renseignerez dans ce fichier les param\u00e8tres de votre base de donn\u00e9es (le driver utilis\u00e9 &#8211; dans le doute laissez PDO -, l&rsquo;IP de la machine cible, votre nom d&rsquo;utilisateur et enfin le mot de passe).Dans la partie database, mettez le nom de votre base de donn\u00e9es: assurez-vous bien entendu qu&rsquo;elle existe ! La mienne s&rsquo;appelle \u00ab\u00a0exercice\u00a0\u00bb, je la cr\u00e9e sans plus attendre en ligne de commande (mon serveur MySQL est sur ma machine locale, je ne pr\u00e9cise donc pas -h localhost) :<\/p>\n<pre>mysql -u root -p -e 'create database exercice'<\/pre>\n<p>Pour m&rsquo;assurer que tout est en place avant de m&rsquo;amuser avec les migrations, je lance une derni\u00e8re commande :<\/p>\n<pre>sebastien.ferrandez@sebastien:~\/migrations$ <strong>Symfony\/app\/console doctrine:migrations:status<\/strong>\r\n\r\n == Configuration\r\n\r\n    &gt;&gt; Name:                        Application Migrations\r\n    &gt;&gt; Database Driver:             pdo_mysql\r\n    &gt;&gt; Database Name:               exercice\r\n    &gt;&gt; Configuration Source:        manually configured\r\n    &gt;&gt; Version Table Name:          migration_versions\r\n    &gt;&gt; Migrations Namespace:        Application\\Migrations\r\n    &gt;&gt; Migrations Directory:        \/home\/sebastien.ferrandez\/migrations\/Symfony\/app\/DoctrineMigrations\r\n    &gt;&gt; Current Version:             0\r\n    &gt;&gt; Latest Version:              0\r\n    &gt;&gt; Executed Migrations:         0\r\n    &gt;&gt; Executed Unavailable Migrations: 0\r\n    &gt;&gt; Available Migrations:            0\r\n    &gt;&gt; New Migrations:                  0<\/pre>\n<p>Tout semble fonctionner ! Comme je suis d&rsquo;un naturel curieux et que je ne crois que ce que je vois, je regarde si des choses se sont pass\u00e9es dans ma base de donn\u00e9es :<\/p>\n<pre>sebastien.ferrandez@sebastien:~\/migrations$ mysql -u root -p -e 'use exercice; show tables'\r\nEnter password: \r\n+--------------------+\r\n| Tables_in_exercice |\r\n+--------------------+\r\n| migration_versions |\r\n+--------------------+\r\n<\/pre>\n<p>Et la r\u00e9ponse est OUI ! Une nouvelle table a \u00e9t\u00e9 cr\u00e9\u00e9e pour g\u00e9rer les versions de mes migrations ! Tout est maintenant r\u00e9uni pour s&rsquo;adonner sans retenue aux joies de la migration avec Doctrine !<br \/>\nRendez-vous donc bient\u00f4t dans la partie 2 pour y voir du concret !!!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nous allons voir comment se servir du bundle de migrations fourni par Doctrine\u00a0avec Symfony et Composer. Placez vous dans le r\u00e9pertoire qui servira de base \u00e0 cet exercice. Pour ma part j&rsquo;ai choisi la localisation suivante : mkdir $HOME\/migrations &amp;&amp; cd $HOME\/migrations Nous allons tout d&rsquo;abord installer Composer dans ce r\u00e9pertoire. Bien \u00e9videmment, il vous [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[38,33,2],"tags":[37,34,35,36],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.6.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Doctrine : les migrations avec le bundle DoctrineMigrationsBundle (1\/3) - La Fabrique de code - Tech blog<\/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:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/doctrine-les-migrations-avec-le-bundle-doctrinemigrationsbundle\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Doctrine : les migrations avec le bundle DoctrineMigrationsBundle (1\/3) - La Fabrique de code - Tech blog\" \/>\n<meta property=\"og:description\" content=\"Nous allons voir comment se servir du bundle de migrations fourni par Doctrine\u00a0avec Symfony et Composer. Placez vous dans le r\u00e9pertoire qui servira de base \u00e0 cet exercice. Pour ma part j&rsquo;ai choisi la localisation suivante : mkdir $HOME\/migrations &amp;&amp; cd $HOME\/migrations Nous allons tout d&rsquo;abord installer Composer dans ce r\u00e9pertoire. Bien \u00e9videmment, il vous [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/doctrine-les-migrations-avec-le-bundle-doctrinemigrationsbundle\/\" \/>\n<meta property=\"og:site_name\" content=\"La Fabrique de code - Tech blog\" \/>\n<meta property=\"article:published_time\" content=\"2013-04-20T07:36:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2013-04-20T20:00:54+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary\" \/>\n<meta name=\"twitter:creator\" content=\"@LaFabrique2Code\" \/>\n<meta name=\"twitter:site\" content=\"@LaFabrique2Code\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/doctrine-les-migrations-avec-le-bundle-doctrinemigrationsbundle\/\",\"url\":\"https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/doctrine-les-migrations-avec-le-bundle-doctrinemigrationsbundle\/\",\"name\":\"Doctrine : les migrations avec le bundle DoctrineMigrationsBundle (1\/3) - La Fabrique de code - Tech blog\",\"isPartOf\":{\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/#website\"},\"datePublished\":\"2013-04-20T07:36:51+00:00\",\"dateModified\":\"2013-04-20T20:00:54+00:00\",\"author\":{\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/#\/schema\/person\/83863c048b82fd9ccf6407bddd241162\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/doctrine-les-migrations-avec-le-bundle-doctrinemigrationsbundle\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/doctrine-les-migrations-avec-le-bundle-doctrinemigrationsbundle\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/doctrine-les-migrations-avec-le-bundle-doctrinemigrationsbundle\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"http:\/\/www.lafabriquedecode.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Doctrine : les migrations avec le bundle DoctrineMigrationsBundle (1\/3)\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/#website\",\"url\":\"http:\/\/www.lafabriquedecode.com\/blog\/\",\"name\":\"La Fabrique de code - Tech blog\",\"description\":\"PHP objet, MySQL, Design Patterns, OOP...et plus !\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/www.lafabriquedecode.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/#\/schema\/person\/83863c048b82fd9ccf6407bddd241162\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"http:\/\/0.gravatar.com\/avatar\/fc2e1de7c8a1871b50ff9c6a6f8682a2?s=96&d=retro&r=g\",\"contentUrl\":\"http:\/\/0.gravatar.com\/avatar\/fc2e1de7c8a1871b50ff9c6a6f8682a2?s=96&d=retro&r=g\",\"caption\":\"admin\"},\"url\":\"http:\/\/www.lafabriquedecode.com\/blog\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Doctrine : les migrations avec le bundle DoctrineMigrationsBundle (1\/3) - La Fabrique de code - Tech blog","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:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/doctrine-les-migrations-avec-le-bundle-doctrinemigrationsbundle\/","og_locale":"fr_FR","og_type":"article","og_title":"Doctrine : les migrations avec le bundle DoctrineMigrationsBundle (1\/3) - La Fabrique de code - Tech blog","og_description":"Nous allons voir comment se servir du bundle de migrations fourni par Doctrine\u00a0avec Symfony et Composer. Placez vous dans le r\u00e9pertoire qui servira de base \u00e0 cet exercice. Pour ma part j&rsquo;ai choisi la localisation suivante : mkdir $HOME\/migrations &amp;&amp; cd $HOME\/migrations Nous allons tout d&rsquo;abord installer Composer dans ce r\u00e9pertoire. Bien \u00e9videmment, il vous [&hellip;]","og_url":"https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/doctrine-les-migrations-avec-le-bundle-doctrinemigrationsbundle\/","og_site_name":"La Fabrique de code - Tech blog","article_published_time":"2013-04-20T07:36:51+00:00","article_modified_time":"2013-04-20T20:00:54+00:00","author":"admin","twitter_card":"summary","twitter_creator":"@LaFabrique2Code","twitter_site":"@LaFabrique2Code","twitter_misc":{"\u00c9crit par":"admin","Dur\u00e9e de lecture estim\u00e9e":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/doctrine-les-migrations-avec-le-bundle-doctrinemigrationsbundle\/","url":"https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/doctrine-les-migrations-avec-le-bundle-doctrinemigrationsbundle\/","name":"Doctrine : les migrations avec le bundle DoctrineMigrationsBundle (1\/3) - La Fabrique de code - Tech blog","isPartOf":{"@id":"http:\/\/www.lafabriquedecode.com\/blog\/#website"},"datePublished":"2013-04-20T07:36:51+00:00","dateModified":"2013-04-20T20:00:54+00:00","author":{"@id":"http:\/\/www.lafabriquedecode.com\/blog\/#\/schema\/person\/83863c048b82fd9ccf6407bddd241162"},"breadcrumb":{"@id":"https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/doctrine-les-migrations-avec-le-bundle-doctrinemigrationsbundle\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/doctrine-les-migrations-avec-le-bundle-doctrinemigrationsbundle\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/doctrine-les-migrations-avec-le-bundle-doctrinemigrationsbundle\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"http:\/\/www.lafabriquedecode.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Doctrine : les migrations avec le bundle DoctrineMigrationsBundle (1\/3)"}]},{"@type":"WebSite","@id":"http:\/\/www.lafabriquedecode.com\/blog\/#website","url":"http:\/\/www.lafabriquedecode.com\/blog\/","name":"La Fabrique de code - Tech blog","description":"PHP objet, MySQL, Design Patterns, OOP...et plus !","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/www.lafabriquedecode.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"http:\/\/www.lafabriquedecode.com\/blog\/#\/schema\/person\/83863c048b82fd9ccf6407bddd241162","name":"admin","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"http:\/\/www.lafabriquedecode.com\/blog\/#\/schema\/person\/image\/","url":"http:\/\/0.gravatar.com\/avatar\/fc2e1de7c8a1871b50ff9c6a6f8682a2?s=96&d=retro&r=g","contentUrl":"http:\/\/0.gravatar.com\/avatar\/fc2e1de7c8a1871b50ff9c6a6f8682a2?s=96&d=retro&r=g","caption":"admin"},"url":"http:\/\/www.lafabriquedecode.com\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/posts\/325"}],"collection":[{"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/comments?post=325"}],"version-history":[{"count":9,"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/posts\/325\/revisions"}],"predecessor-version":[{"id":347,"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/posts\/325\/revisions\/347"}],"wp:attachment":[{"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/media?parent=325"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/categories?post=325"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/tags?post=325"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}