This is recipe for using Doctrine 2 in your [CodeIgniter](http://www.codeigniter.com) framework. > **NOTE** > > This might not work for all CodeIgniter versions and may require slight adjustments. Here is how to set it up: Make a CodeIgniter library that is both a wrapper and a bootstrap for Doctrine 2. ++ Setting up the file structure Here are the steps: * Add a php file to your system/application/libraries folder called Doctrine.php. This is going to be your wrapper/bootstrap for the D2 entity manager. * Put the Doctrine folder (the one that contains Common, DBAL, and ORM) inside that same libraries folder. * Your system/application/libraries folder now looks like this: system/applications/libraries -Doctrine -Doctrine.php -index.html * If you want, open your config/autoload.php file and autoload your Doctrine library. [php] $autoload['libraries'] = array('doctrine'); ++ Creating your Doctrine CodeIgniter library Now, here is what your Doctrine.php file should look like. Customize it to your needs. [php] use Doctrine\Common\ClassLoader, Doctrine\ORM\Configuration, Doctrine\ORM\EntityManager, Doctrine\Common\Cache\ArrayCache, Doctrine\DBAL\Logging\EchoSqlLogger; class Doctrine { public $em = null; public function __construct() { // load database configuration from CodeIgniter require_once APPPATH.'config/database.php'; // Set up class loading. You could use different autoloaders, provided by your favorite framework, // if you want to. require_once APPPATH.'libraries/Doctrine/Common/ClassLoader.php'; $doctrineClassLoader = new ClassLoader('Doctrine', APPPATH.'libraries'); $doctrineClassLoader->register(); $entitiesClassLoader = new ClassLoader('models', rtrim(APPPATH, "/" )); $entitiesClassLoader->register(); $proxiesClassLoader = new ClassLoader('Proxies', APPPATH.'models/proxies'); $proxiesClassLoader->register(); // Set up caches $config = new Configuration; $cache = new ArrayCache; $config->setMetadataCacheImpl($cache); $config->setQueryCacheImpl($cache); // Proxy configuration $config->setProxyDir(APPPATH.'/models/proxies'); $config->setProxyNamespace('Proxies'); // Set up logger $logger = new EchoSqlLogger; $config->setSqlLogger($logger); $config->setAutoGenerateProxyClasses( TRUE ); // Database connection information $connectionOptions = array( 'driver' => 'pdo_mysql', 'user' => $db['default']['username'], 'password' => $db['default']['password'], 'host' => $db['default']['hostname'], 'dbname' => $db['default']['database'] ); // Create EntityManager $this->em = EntityManager::create($connectionOptions, $config); } } Please note that this is a development configuration; for a production system you'll want to use a real caching system like APC, get rid of EchoSqlLogger, and turn off autoGenerateProxyClasses. For more details, consult the [Doctrine 2 Configuration documentation](http://www.doctrine-project.org/documentation/manual/2_0/en/configuration#configuration-options). ++ Now to use it Whenever you need a reference to the entity manager inside one of your controllers, views, or models you can do this: [php] $em = $this->doctrine->em; That's all there is to it. Once you get the reference to your EntityManager do your Doctrine 2.0 voodoo as normal. Note: If you do not choose to autoload the Doctrine library, you will need to put this line before you get a reference to it: [php] $this->load->library('doctrine'); Good luck!