Object relational mapping - Relations - Foreign key associations - One-to-One.php 1.45 KB
Newer Older
hansbrix's avatar
hansbrix committed
1 2 3
Binding One-To-One foreign key associations is done with Doctrine_Record::ownsOne() and Doctrine_Record::hasOne() methods.
In the following example user owns one email and has one address. So the relationship between user and email is one-to-one composite.
The relationship between user and address is one-to-one aggregate.
4

hansbrix's avatar
hansbrix committed
5 6


lsmith's avatar
lsmith committed
7
The Email component here is mapped to User component's column email_id hence their relation is called LOCALKEY relation.
hansbrix's avatar
hansbrix committed
8 9 10 11 12 13 14 15 16 17
On the other hand the Address component is mapped to User by it's user_id column hence the relation between User and Address is called
FOREIGNKEY relation.

<code type="php">
class User extends Doctrine_Record {
    public function setUp() {
        $this->hasOne('Address','Address.user_id');
        $this->ownsOne('Email','User.email_id');
        $this->ownsMany('Phonenumber','Phonenumber.user_id');
    }
lsmith's avatar
lsmith committed
18
    public function setTableDefinition() {
hansbrix's avatar
hansbrix committed
19 20 21 22 23 24 25 26 27 28 29 30 31
        $this->hasColumn('name','string',50);
        $this->hasColumn('loginname','string',20);
        $this->hasColumn('password','string',16);

        // foreign key column for email ID
        $this->hasColumn('email_id','integer');
    }
}
class Email extends Doctrine_Record {
    public function setTableDefinition() {
        $this->hasColumn('address','string',150);
    }
}
lsmith's avatar
lsmith committed
32
class Address extends Doctrine_Record {
hansbrix's avatar
hansbrix committed
33 34 35 36
    public function setTableDefinition() {
        $this->hasColumn('street','string',50);
        $this->hasColumn('user_id','integer');
    }
lsmith's avatar
lsmith committed
37
}
hansbrix's avatar
hansbrix committed
38
</code>