From db6db4cd29a01362904b416754442f3e0d3f2498 Mon Sep 17 00:00:00 2001 From: meus Date: Mon, 30 Jul 2007 19:38:59 +0000 Subject: [PATCH] fixed docs related to seSubclasses/setInheritanceMap --- manual/new/docs/en/mapping-relations.txt | 65 ++++-------------------- 1 file changed, 11 insertions(+), 54 deletions(-) diff --git a/manual/new/docs/en/mapping-relations.txt b/manual/new/docs/en/mapping-relations.txt index 5c64537c9..56677d187 100644 --- a/manual/new/docs/en/mapping-relations.txt +++ b/manual/new/docs/en/mapping-relations.txt @@ -342,7 +342,8 @@ In the following example we have one database table called {{entity}}. Users and The entity table has a column called {{type}} which tells whether an entity is a group or a user. Then we decide that users are type 1 and groups type 2. -The only thing we have to do is to create 3 records (the same as before) and add call the {{Doctrine_Table::setInheritanceMap()}} method inside the {{setUp()}} method. +The only thing we have to do is to create 3 records (the same as before) and add +call the {{Doctrine_Table::setSubclasses()}} method from the parent class. class Entity extends Doctrine_Record @@ -357,63 +358,19 @@ class Entity extends Doctrine_Record // this column is used for column // aggregation inheritance $this->hasColumn('type', 'integer', 11); + $this->setSubclasses("User" => array("type => 1"), "Group" => + array("type" => 2)); } } -class User extends Entity -{ - public function setUp() - { - $this->setInheritanceMap(array('type'=>1)); - } -} +class User extends Entity {} +class Group extends Entity {} -class Group extends Entity -{ - public function setUp() - { - $this->setInheritanceMap(array('type'=>2)); - } -} -If we want to be able to fetch a record from the {{Entity}} table and automatically get a {{User}} record if the {{Entity}} we fetched is a user we have to do set the subclasses option in the parent class. The adjusted example: - - -class Entity extends Doctrine_Record -{ - public function setTableDefinition() - { - $this->hasColumn('name', 'string', 30); - $this->hasColumn('username', 'string', 20); - $this->hasColumn('password', 'string', 16); - $this->hasColumn('created', 'integer', 11); - - // this column is used for column - // aggregation inheritance - $this->hasColumn('type', 'integer', 11); - $this->option('subclasses', array('User', 'Group')); - } -} - -class User extends Entity -{ - public function setUp() - { - $this->setInheritanceMap(array('type'=>1)); - } -} - -class Group extends Entity -{ - public function setUp() - { - $this->setInheritanceMap(array('type'=>2)); - } -} - - -We can then do the following given the previous table mapping. +This feature also enable us to query the {{Entity}} table and get a {{User}} or +{{Group}} object back if the returned object matches the constraints set in the +parent class. See the code example below for an example of this. $user = new User(); @@ -430,13 +387,13 @@ $group->save(); $q = new Doctrine_Query(); $user = $q->from('Entity')->where('id=?')->execute(array($user->id))->getFirst(); +assert($user instanceOf User); $q = new Doctrine_Query(); $group = $q->from('Entity')->where('id=?')->execute(array($group->id))->getFirst(); +assert($group instanceOf Group); -The user object is here an instance of {{User}} while the group object is an instance of {{Group}}. - ++ Foreign key constraints +++ Introduction