Installation and Configuration

Doctrine can be installed with Composer. For older versions we still have PEAR packages <http://pear.doctrine-project.org>.

Define the following requirement in your composer.json file:

    "require": {
        "doctrine/orm": "*"

Then call composer install from your command line. If you don't know how Composer works, check out their Getting Started <http://getcomposer.org/doc/00-intro.md> to set up.

Class loading

Autoloading is taken care of by Composer. You just have to include the composer autoload file in your project:

// bootstrap.php
// Include Composer Autoload (relative to project root).
require_once "vendor/autoload.php";

Obtaining an EntityManager

Once you have prepared the class loading, you acquire an EntityManager instance. The EntityManager class is the primary access point to ORM functionality provided by Doctrine.

// bootstrap.php
require_once "vendor/autoload.php";

use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;

$paths = array("/path/to/entities-or-mapping-files");
$isDevMode = false;

// the connection configuration
$dbParams = array(
    'driver'   => 'pdo_mysql',
    'user'     => 'root',
    'password' => '',
    'dbname'   => 'foo',

$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode);
$entityManager = EntityManager::create($dbParams, $config);

Or if you prefer XML:

$config = Setup::createXMLMetadataConfiguration($paths, $isDevMode);
$entityManager = EntityManager::create($dbParams, $config);

Or if you prefer YAML:

$config = Setup::createYAMLMetadataConfiguration($paths, $isDevMode);
$entityManager = EntityManager::create($dbParams, $config);

Inside the Setup methods several assumptions are made:

  • If `$devMode` is true always use an ArrayCache (in-memory) and regenerate proxies on every request.
  • If `$devMode` is false, check for Caches in the order APC, Xcache, Memcache (, Redis ( unless `$cache` is passed as fourth argument.
  • If `$devMode` is false, set then proxy classes have to be explicitly created through the command line.
  • If third argument `$proxyDir` is not set, use the systems temporary directory.

If you want to configure Doctrine in more detail, take a look at the Advanced Configuration section.

You can learn more about the database connection configuration in the Doctrine DBAL connection configuration reference.

Setting up the Commandline Tool

Doctrine ships with a number of command line tools that are very helpful during development. You can call this command from the Composer binary directory:

$ php vendor/bin/doctrine

You need to register your applications EntityManager to the console tool to make use of the tasks by creating a cli-config.php file with the following content:

On Doctrine 2.4 and above:

use Doctrine\ORM\Tools\Console\ConsoleRunner;

// replace with file to your own project bootstrap
require_once 'bootstrap.php';

// replace with mechanism to retrieve EntityManager in your app
$entityManager = GetEntityManager();

return ConsoleRunner::createHelperSet($entityManager);

On Doctrine 2.3 and below:

// cli-config.php
require_once 'my_bootstrap.php';

// Any way to access the EntityManager from  your application
$em = GetMyEntityManager();

$helperSet = new \Symfony\Component\Console\Helper\HelperSet(array(
    'db' => new \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper($em->getConnection()),
    'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($em)