Bogomil Shopov

Human. Artist. Hacker. I care about free and open-source software(F/LOSS), cybersecurity, ethical design, privacy, and technology. 20+ experience in technology. 40+ in being human. I encourage people to become better humans with heavy metal and technologies. I also promote technologies to be considerate of humans. Let's see how it goes!

Open Technologies · September 20, 2010

How to Run Doctrine ORM with CodeIgniter

There are a lot of tutorials in the web regarding this subject, but I think this is the fastest and the easiest way to run a ORM solution with CodeIgniter.


1. Download (if you haven’t already) CodeIgniter
2. Download Doctrine from here
3. Extract CodeIgniter to your web root.
4. Extract Doctrine folder and Doctrine.php in system/plugins folder of your Coeigniter install.
5. Create a file with following content and save it in the same folder and name it as doctrine_pi.php:

 $db_values) {

	// first we must convert to dsn format
	$dsn = $db[$connection_name]['dbdriver'] .
		'://' . $db[$connection_name]['username'] .
		':' . $db[$connection_name]['password'].
		'@' . $db[$connection_name]['hostname'] .
		'/' . $db[$connection_name]['database'];


// CodeIgniter's Model class needs to be loaded
require_once BASEPATH.'/libraries/Model.php';

// telling Doctrine where our models are located


// this will allow us to use "mutators"

// this sets all table columns to notnull and unsigned (for ints) by default
	array('notnull' => true, 'unsigned' => true));

// set the default primary key to be named 'id', integer, 4 bytes
	array('name' => 'id', 'type' => 'integer', 'length' => 4));

6. Integration is ready.
7. Go to your system/application/config folder and edit:
7.1 autoload.php:

$autoload['plugin'] = array('doctrine');

7.2 database.php – fill your data
8. We are ready to make our first example


Doctrine is an Object Relational Mapper for PHP. It basically means that you can map your database tables to classes in your web application. You don’t need Models anymore and you don’t have to write SQL anyore, just use ORM.

Simple controller

username = 'johndoe';
		$u->password = 'secret';
		$u->first_name = 'John';
		$u->last_name = 'Doe';



Here is the ORM model. Just few definitions, without a single track of SQL:)

class User extends Doctrine_Record {

	public function setTableDefinition() {
		$this->hasColumn('username', 'string', 255);
		$this->hasColumn('password', 'string', 255);
		$this->hasColumn('first_name', 'string', 255);
		$this->hasColumn('last_name', 'string', 255);


This post was inspired by this tutorial here. You can see it, if you are interested in learning ORM from scratch with Doctrine and CodeIgniter, but PLEASE use this setup instead of described by other author..