class User extends Doctrine_Record { public function setTableDefinition(){ $this->setTableName('users'); $this->hasColumn('id', 'integer', 4, array('notnull' => true, 'primary' => true, 'unsigned' => true, 'autoincrement' => true)); $this->hasColumn('name', 'string', 255); } public function setUp() { $this->hasMany('PhoneNumber as numbers', array('local' => 'user_id', 'foreign' => 'phonenumber_id', 'refClass' => 'Ref_UserPhoneNumbers')); } } class Ref_UserPhoneNumbers extends Doctrine_Record { public function setTableDefinition(){ $this->setTableName('ref_user_phonenumbers'); $this->hasColumn('user_id', 'integer', null, array('primary' => true)); $this->hasColumn('phonenumber_id', 'integer', null, array('primary' => true)); } } class PhoneNumber extends Doctrine_Record { public function setTableDefinition(){ $this->setTableName('phonenumbers'); $this->hasColumn('id', 'integer', 4, array('notnull' => true, 'primary' => true, 'unsigned' => true, 'autoincrement' => true)); $this->hasColumn('number', 'string', 255); } public function setUp() { $this->hasOne('User as user', array('local' => 'phonenumber_id', 'foreign' => 'user_id', 'refClass' => 'Ref_UserPhoneNumbers')); } } $user = new User(); $user->name = 'me'; $user->numbers[0]->number = '555'; $user->save(); $q = new Doctrine_Query(); $pn = $q->from('PhoneNumber')->execute(); echo $pn[0]->user[0]->name;