Implements the foreign key relationship (TActiveRecord::BELONGS_TO) between the source objects and the related foreign object. Consider the entity relationship between a Team and a Player.
- +------+ +--------+
- | Team | 1 <----- * | Player |
- +------+ +--------+
Where one team may have 0 or more players and each player belongs to only one team. We may model Team-Player
object relationship as active record as follows.
- class TeamRecord extends TActiveRecord
- {
- // see TActiveRecordHasMany for detailed definition.
- }
- class PlayerRecord extends TActiveRecord
- {
- const TABLE='player';
- public $player_id; //primary key
- public $team_name; //foreign key player.team_name <-> team.name
- public $age;
- public $team; //foreign object TeamRecord
-
-
- public static $RELATIONS = array
- (
- 'team' => array(self::BELONGS_TO, 'TeamRecord')
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
- }
The static <tt>$RELATIONS</tt> property of PlayerRecord defines that the property <tt>$team</tt> belongs to a <tt>TeamRecord</tt>.
The team object may be fetched as follows.
- $players = PlayerRecord::finder()->with_team()->findAll();
The method <tt>with_xxx()</tt> (where <tt>xxx</tt> is the relationship property name, in this case, <tt>team</tt>) fetchs the corresponding TeamRecords using a second query (not by using a join). The <tt>with_xxx()</tt> accepts the same arguments as other finder methods of TActiveRecord, e.g. <tt>with_team('location = ?', 'Madrid')</tt>.