class User extends Doctrine_Record { public function setTableDefinition() { $this->setTableName( 'users' ); $this->hasColumn( 'fname', 'string', 255, array( 'notnull' => true ) ); $this->hasColumn( 'lname', 'string', 255, array( 'notnull' => true ) ); $this->option( 'engine', 'InnoDB' ); $this->option( 'charset', 'latin1' ); } public function setUp() { $this->ownsMany( 'EmailAddress', 'EmailAddress.user_id' ); } } class UserTable extends Doctrine_Table { public function getQueryFindAllWithEmailAddresses() { return Doctrine_Query::create()->from( 'User u' ) ->leftJoin( 'u.EmailAddress' ); } public function findAllWithEmailAddresses() { return $this->getQueryFindAllWithEmailAddresses()->execute(); } } class EmailAddress extends Doctrine_Record { public function setTableDefinition() { $this->setTableName( 'email_addresses' ); $this->hasColumn( 'user_id', 'integer', 11, array( 'notnull' => true ) ); $this->hasColumn( 'email_address', 'string', 255, array( 'notnull' => true ) ); $this->option( 'engine', 'InnoDB' ); $this->option( 'charset', 'latin1' ); } public function setUp() { $this->hasOne( 'User', 'EmailAddress.user_id', 'id' ); } } class EmailAddressTable extends Doctrine_Table { public function getQueryFindAllWithUsers() { return Doctrine_Query::create()->from( 'EmailAddress ea' ) ->leftJoin( 'ea.User' ); } public function findAllWithUsers() { return $this->getQueryFindAllWithUsers()->execute(); } }