<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://prendreuncafe.com/blog/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Prendre un Café - Tag - orm</title>
  <link>http://prendreuncafe.com/blog/</link>
  <atom:link href="http://prendreuncafe.com/blog/feed/tag/orm/rss2" rel="self" type="application/rss+xml"/>
  <description></description>
  <language>fr</language>
  <pubDate>Mon, 06 Oct 2008 12:35:34 +0200</pubDate>
  <copyright>Contenus sous licence Creative Commons BY-SA</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Utiliser Doctrine au lieu de Propel dans Symfony sous Ubuntu</title>
    <link>http://prendreuncafe.com/blog/post/2007/01/07/Utiliser-Doctrine-au-lieu-de-Propel-dans-Symfony-sous-Ubuntu</link>
    <guid isPermaLink="false">urn:md5:8de6053271d14bbb95afe9a12814ed64</guid>
    <pubDate>Sun, 07 Jan 2007 18:45:00 +0100</pubDate>
    <dc:creator>NiKo</dc:creator>
        <category>Dev</category>
        <category>doctrine</category><category>orm</category><category>php</category><category>plugins</category><category>symfony</category><category>tutoriel</category>    
    <description>    &lt;p&gt;&lt;a href=&quot;http://www.phpdoctrine.com/&quot; hreflang=&quot;en&quot;&gt;Doctrine&lt;/a&gt; est une couche &lt;acronym title=&quot;Object Relationnal Model&quot;&gt;ORM&lt;/acronym&gt; rapide et performante, basée sur le &lt;a href=&quot;http://en.wikipedia.org/wiki/Active_record&quot; hreflang=&quot;en&quot;&gt;pattern ActiveRecord&lt;/a&gt; bien connu des adeptes de &lt;a href=&quot;http://fr.wikipedia.org/wiki/Ruby_on_Rails&quot; hreflang=&quot;fr&quot;&gt;Ruby on Rails&lt;/a&gt;, pouvant être utilisée en lieu et place de &lt;a href=&quot;http://propel.phpdb.org/trac/&quot; hreflang=&quot;en&quot;&gt;Propel&lt;/a&gt;, l'ORM natif embarqué avec &lt;a href=&quot;http://www.symfony-project.com&quot; hreflang=&quot;en&quot;&gt;Symfony&lt;/a&gt; par défaut.&lt;/p&gt;


&lt;h3&gt;Installation&lt;/h3&gt;


&lt;p&gt;La mise en place de Doctrine se présente sous la forme d'un plugin, &lt;a href=&quot;http://www.symfony-project.com/trac/wiki/sfDoctrine&quot; hreflang=&quot;en&quot;&gt;sfDoctrine&lt;/a&gt;, qui s'installe via un checkout Subversion dans le répertoire &lt;code&gt;plugins&lt;/code&gt; de votre projet Symfony, comme suit :&lt;/p&gt;


&lt;pre&gt;$ cd /path/to/project/plugins
$ sudo apt-get install subversion
$ svn co http://svn.symfony-project.com/plugins/sfDoctrinePlugin sfDoctrinePlugin&lt;/pre&gt;


&lt;p&gt;Note: Si votre projet est déjà versionné dans un dépôt Subversion, vous pouvez faire un &lt;a href=&quot;http://svnbook.red-bean.com/en/1.0/ch07s03.html&quot; hreflang=&quot;en&quot;&gt;svn:externals&lt;/a&gt; vers le plugin :&lt;/p&gt;


&lt;pre&gt;$ propset svn:externals &amp;quot;symfony http://svn.symfony-project.com/plugins/sfDoctrinePlugin&amp;quot; /path/to/project/plugins&lt;/pre&gt;


&lt;p&gt;L'avantage est que desormais vos &lt;code&gt;svn up&lt;/code&gt; mettront à jour les fichiers du plugin d'un même coup.&lt;/p&gt;


&lt;p&gt;Ceci fait, il faut installer &lt;a href=&quot;http://fr.php.net/pdo&quot; hreflang=&quot;fr&quot;&gt;PDO&lt;/a&gt; et son driver MySQL via &lt;a href=&quot;http://pecl.php.net/&quot; hreflang=&quot;en&quot;&gt;PECL&lt;/a&gt; sur votre système si ce n'est pas déjà le cas :&lt;/p&gt;


&lt;pre&gt;$ sudo apt-get install build-essential php5-dev php-pear libmysqlclient12-dev
$ sudo pecl install PDO PDO_MySQL&lt;/pre&gt;


&lt;p&gt;C'est un peu long, puisque compilé à la volée. Il ne faut pas oublier d'activer notre nouvelle extension et son driver dans nos fichiers différents &lt;code&gt;php.ini&lt;/code&gt; :&lt;/p&gt;


&lt;pre&gt;$ sudo vi /etc/php5/apache2/php.ini /etc/php5/cli/php.ini&lt;/pre&gt;


&lt;p&gt;Et ajoutez en toute fin de fichiers les deux lignes suivantes :&lt;/p&gt;


&lt;pre&gt;extension=pdo.so
extension=pdo_mysql.so&lt;/pre&gt;


&lt;h3&gt;Configuration&lt;/h3&gt;


&lt;p&gt;Maintenant, définissons nos paramètres de connexion pour le projet &lt;code&gt;monprojet&lt;/code&gt; dans le fichier &lt;code&gt;./config/databases.yml&lt;/code&gt; du projet :&lt;/p&gt;


&lt;pre&gt;all:
  monprojet:
    class: sfDoctrineDatabase
    param:
      dsn: mysql://user:pass@localhost/mydb&lt;/pre&gt;


&lt;p&gt;Ensuite, on va tester une structure de données assez simpliste (au pif et pour faire original, un blog), pour vérifier que ça marche. On édite le fichier &lt;code&gt;./config/doctrine/monprojet.yml&lt;/code&gt; :&lt;/p&gt;


&lt;pre&gt;User:
  tableName:     users
  columns:
    name:        string(20)
    created_at:  timestamp
Article:
  tableName:     articles
  columns:
    title:       string(255)
    exerpt:      text
    description: text
    created_at:  timestamp
    user_id:
      foreignClass: User
      foreignName:  author
      localName:    article_author
      onDelete:     cascade
Comment:
  tableName:     comments
  columns:
    content:     text
    created_at:  timestamp
    user_id:
      foreignClass: User
      foreignName:  commenter
      localName:    comment_user
      onDelete:     cascade
    article_id :
      foreignClass: Article
      localName:    comment_article
      onDelete:     cascade&lt;/pre&gt;


&lt;p&gt;On peut maintenant générer les classes du modèle objet précedemment défini :&lt;/p&gt;


&lt;pre&gt;$ symfony doctrine-build-model&lt;/pre&gt;


&lt;p&gt;Ce qui nous donne :&lt;/p&gt;


&lt;pre&gt;&amp;gt;&amp;gt; loading   Class descriptions from &amp;quot;/home/...m/config/doctrine/monprojet.yml&amp;quot;
&amp;gt;&amp;gt; writing   BaseUser.class.php
&amp;gt;&amp;gt; writing   BaseArticle.class.php
&amp;gt;&amp;gt; writing   BaseComment.class.php&lt;/pre&gt;


&lt;p&gt;Ces fichiers ont été créés sous &lt;code&gt;./lib/model/doctrine&lt;/code&gt; automatiquement. Vous pourrez modifier les classes objets pour les adapter à vos besoin, mais attention, les classes de base situées dans le sous-répertoire &lt;code&gt;generated&lt;/code&gt; seront systématiquement écrasées à chaque regénération.&lt;/p&gt;


&lt;h3&gt;Utilisation&lt;/h3&gt;


&lt;p&gt;Les commandes de scaffolding propres à Symfony et Propel ont été adaptées partiellement à Doctrine ; vous trouverez ainsi quelques tâches utiles :&lt;/p&gt;


&lt;pre&gt;doctrine-export            &amp;gt; exports doctrine schemas to propel schema.xml
doctrine-generate-crud     &amp;gt; Creates Doctrine CRUD Module
doctrine-import            &amp;gt; converts propel schema.*ml into doctrine schema
doctrine-init-admin        &amp;gt; initialize a new doctrine admin module&lt;/pre&gt;


&lt;h3&gt;Pour aller plus loin&lt;/h3&gt;


&lt;p&gt;La syntaxe de requêtage et les autres aspects de Doctrine sont détaillés dans les ressources suivantes :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.symfony-project.com/trac/wiki/sfDoctrine&quot; hreflang=&quot;en&quot;&gt;Sur le wiki de Symfony&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://doctrine.pengus.net/Main_Page&quot; hreflang=&quot;en&quot;&gt;Sur le wiki de Doctrine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.phpdoctrine.com/documentation.php&quot; hreflang=&quot;en&quot;&gt;La documentation officielle de Doctrine&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;hr/&gt;&lt;p style='margin:.5em 0;padding:.5em;border:1px solid #333;background:#eee;color:#222'&gt;&lt;small&gt;Ce billet intitulé &lt;a href='http://prendreuncafe.com/blog/post/2007/01/07/Utiliser-Doctrine-au-lieu-de-Propel-dans-Symfony-sous-Ubuntu'&gt;Utiliser Doctrine au lieu de Propel dans Symfony sous Ubuntu&lt;/a&gt; a été rédigé par &lt;a href='http://prendreuncafe.com/cv'&gt;Nicolas Perriault&lt;/a&gt; et publié sur le blog &lt;a href='http://prendreuncafe.com/blog/'&gt;Prendre un Café&lt;/a&gt; sous licence &lt;a href='http://creativecommons.org/licenses/by-nc-sa/2.5/'&gt;Creative Commons BY-NC-SA&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;</description>
    
    
    
      </item>
    
</channel>
</rss>
