Using Propel as ORM in Symfony2 applications

Tue Jan 1, 2013

These are roughly 400 words, you could read this in about 2 minutes.

Using Symfony with alternative ORM

Symfony 2 is quite awesome, and what I really like is the ability to switch out any component with another component. Ever since I started building applications with Symfony one thing really has bothered me, and that was Doctrine. It just did not feel natural to use it.

The switch

Lucky me, there is an alternative: Propel ORM. Have a look yourself. You can easily migrate existing projects, it does have the features needed to build something, and it has it’s very own way of forcing you into database independent development. On top of that I like the schema definitions and fixtures a lot.

Now let us switch the default Symfony project to Propel. First I recommend to install Composer.

Using Composer we create a project template:

$ php composer.phar create-project symfony/framework-standard-edition my-project/ 2.1.6

Next we will remove Doctrine and add Propel to the Composer file. Edit composer.json

File: composer.json
- "doctrine/orm": ">=2.2.3,<2.4-dev", - "doctrine/doctrine-bundle": "1.0.*", + "propel/propel-bundle": "1.1.*",

With this we have removed the Doctrine ORM and the Symfony bundle. Now we need to edit app/AppKernel.php

File: app/AppKernel.php
- new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(), + new Propel\PropelBundle\PropelBundle(),

The Symfony configuration in app/config/config.yml also needs a bit of love

File: config.yml
-# Doctrine Configuration -doctrine: - dbal: - driver: %database_driver% - host: %database_host% - port: %database_port% - dbname: %database_name% - user: %database_user% - password: %database_password% - charset: UTF8 - - orm: - auto_generate_proxy_classes: %kernel.debug% - auto_mapping: true +# Propel Configuration +propel: + dbal: + driver: "%database_driver%" + user: "%database_user%" + password: "%database_password%" + dsn: "%database_driver%:host=%database_host%;dbname=%database_name%;charset=%database_charset%"

Last – but not least – we need to edit app/config/parameters.yml:

File: parameters.yml
parameters: database_driver: pdo_mysql database_host: localhost - database_port: ~ database_name: symfony database_user: root database_password: ~ + database_charset: UTF8

Final call

To finalize the switch to Propel, we run Composer once

$ composer update

After a few moments, we are done. You now have a Propel enabled Symfony2 template. The application console now sports a lot of propel commands.

Try the Propel documentation for an overview of the nifty things Propel can do for you.

Tagged with: Symfony2 database Propel

All code snippets in this post are made available to use under the MIT Licence.


comments powered by Disqus