Class \Prado\Data\ActiveRecord\Relations\TActiveRecordHasMany
Implements TActiveRecord::HAS_MANY relationship between the source object having zero or
more foreign objects. Consider the <b>entity</b> 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
{
const TABLE='team';
public $name; //primary key
public $location;
public $players=array(); //list of players
public static $RELATIONS=array
(
'players' => array(self::HAS_MANY, 'PlayerRecord')
);
public static function finder($className=__CLASS__)
{
return parent::finder($className);
}
}
class PlayerRecord extends TActiveRecord
{
// see TActiveRecordBelongsTo for detailed definition
}
The static $RELATIONS property of TeamRecord defines that the property $players has many PlayerRecords.
The players list may be fetched as follows.
$team = TeamRecord::finder()->with_players()->findAll();
The method with_xxx() (where xxx is the relationship property name, in this case, players) fetchs the corresponding PlayerRecords using a second query (not by using a join). The with_xxx() accepts the same arguments as other finder methods of TActiveRecord, e.g. with_players('age < ?', 35).
Class hierarchy
- \Prado\Data\ActiveRecord\Relations\TActiveRecordHasMany
- \Prado\Data\ActiveRecord\Relations\TActiveRecordRelation
Since: 3.1
public
|
|
public
|
|
protected
|
collectForeignObjects(array<string|int, mixed> &$results) : mixed
Get the foreign key index values from the results and make calls to the
database to find the corresponding foreign objects.
|