+++ Introduction Doctrine supports exporting record classes into database. This means that based on the definitions given in your record definitions Doctrine will alter your database schema. Lets say we have a classes called User and Phonenumber with the following definitions: // file User.php class User extends Doctrine_Record { public function setTableDefinition() { $this->hasColumn('name', 'string', 20); } public function setUp() { $this->hasMany('Phonenumber', array('local' => 'id', 'foreign' => 'user_id')); } } // file Phonenumber.php class Phonenumber extends Doctrine_Record { public function setTableDefinition() { $this->hasColumn('phonenumber', 'string', 20); $this->hasColumn('user_id', 'integer'); } public function setUp() { $this->hasOne('User', array('local' => 'user_id', 'foreign' => 'id', 'onDelete' => 'CASCADE')); } } Now lets say these classes are in directory 'models/'. We can make Doctrine to iterate through this directory and attach these classes into your database structure with the following script: require_once('path-to-doctrine/lib/Doctrine.php'); spl_autoload_register(array('Doctrine', 'autoload')); //in order to export we need a database connection Doctrine_Manager::connection('mysql://user:pass@localhost/test'); Doctrine::createTablesFromModels('models'); This would execute the following queries on mysql. CREATE TABLE user (id BIGINT AUTO_INCREMENT, name VARCHAR(20), PRIMARY KEY(id), INDEX(id)); CREATE TABLE phonenumber (id INT AUTO_INCREMENT, phonenumber VARCHAR(20), user_id BIGINT, PRIMARY KEY(id), INDEX(user_id)); ALTER TABLE phonenumber ADD CONSTRAINT FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE; Pay attention to the following things: # The autoincrement primary key columns are auto-added since we didn't specify any primary key columns # Doctrine auto-adds indexes to the referenced relation columns (this is needed in mysql) +++ Getting export queries There might be situations where you don't want to execute the export queries immediately rather you want to get the query strings and maybe attach them to a build.sql file. This can be easily achieved as follows: require_once('path-to-doctrine/lib/Doctrine.php'); spl_autoload_register(array('Doctrine', 'autoload')); Doctrine_Manager::connection('mgsql://user:pass@localhost/test'); $queries = Doctrine::generateSqlFromModels('models'); echo $queries; Consider the same situation and you want to get the string of sql queries needed to perform the exporting. It can be achieved with Doctrine::generateSqlFromModels(). +++ Export options // export everything, table definitions and constraints $manager = Doctrine_Manager::getInstance(); $manager->setAttribute(Doctrine::ATTR_EXPORT, Doctrine::EXPORT_ALL); // export classes without constraints $manager->setAttribute(Doctrine::ATTR_EXPORT, Doctrine::EXPORT_TABLES ^ Doctrine::EXPORT_CONSTRAINTS); // turn off exporting $manager->setAttribute(Doctrine::ATTR_EXPORT, Doctrine::EXPORT_NONE); $sql = Doctrine::generateSqlFromModels();