PHP Class Prado\Data\ActiveRecord\Relations\TActiveRecordHasManyAssociation

Consider the entity relationship between Articles and Categories via the association table Article_Category. +---------+ +------------------+ +----------+ | Article | * -----> * | Article_Category | * <----- * | Category | +---------+ +------------------+ +----------+ Where one article may have 0 or more categories and each category may have 0 or more articles. We may model Article-Category object relationship as active record as follows. class ArticleRecord { const TABLE='Article'; public $article_id; public $Categories=array(); //foreign object collection. public static $RELATIONS = array ( 'Categories' => array(self::MANY_TO_MANY, 'CategoryRecord', 'Article_Category') ); public static function finder($className=__CLASS__) { return parent::finder($className); } } class CategoryRecord { const TABLE='Category'; public $category_id; public $Articles=array(); public static $RELATIONS = array ( 'Articles' => array(self::MANY_TO_MANY, 'ArticleRecord', 'Article_Category') ); public static function finder($className=__CLASS__) { return parent::finder($className); } } The static $RELATIONS property of ArticleRecord defines that the property $Categories has many CategoryRecords. Similar, the static $RELATIONS property of CategoryRecord defines many ArticleRecords. The articles with categories list may be fetched as follows. $articles = TeamRecord::finder()->withCategories()->findAll(); The method with_xxx() (where xxx is the relationship property name, in this case, Categories) fetchs the corresponding CategoryRecords using a second query (not by using a join). The with_xxx() accepts the same arguments as other finder methods of TActiveRecord.
Since: 3.1
Inheritance: extends TActiveRecordRelation
Afficher le fichier Open project: pradosoft/prado

Méthodes publiques

Méthode Description
createCommand ( $criteria, $foreignKeys, $indexValues, $sourceKeys )
getRelationForeignKeys ( ) : array
updateAssociatedRecords ( ) : boolean Updates the associated foreign objects.

Méthodes protégées

Méthode Description
collectForeignObjects ( &$results ) Get the foreign key index values from the results and make calls to the database to find the corresponding foreign objects using association table.
createFkObject ( $type, $row, $foreignKeys ) : TActiveRecord
fetchForeignObjects ( &$results, $foreignKeys, $indexValues, $sourceKeys ) Fetches the foreign objects using TActiveRecord::findAllByIndex()
getAssociationJoin ( $foreignKeys, $indexValues, $sourceKeys ) : string SQL inner join for M-N relationship via association table.
getAssociationTable ( ) : TDbTableInfo
getAssociationTableCommandBuilder ( ) : TDbCommandBuilder
getCommandBuilder ( ) : TDataGatewayCommand
getForeignCommandBuilder ( ) : TDataGatewayCommand
getForeignTable ( ) : TDbTableInfo
getSourceColumns ( $sourceKeys ) : string
getSourceTable ( ) : TDbTableInfo

Private Methods

Méthode Description
addAssociationData ( $builder, $data )
getForeignObjectValues ( $foreignKeys, $fkObject )
getSourceRecordValues ( $obj )
hasAssociationData ( $builder, $data )
updateAssociationTable ( $obj, $fkObjects, $builder )

Method Details

collectForeignObjects() protected méthode

Get the foreign key index values from the results and make calls to the database to find the corresponding foreign objects using association table.
protected collectForeignObjects ( &$results )

createCommand() public méthode

public createCommand ( $criteria, $foreignKeys, $indexValues, $sourceKeys )

createFkObject() protected méthode

protected createFkObject ( $type, $row, $foreignKeys ) : TActiveRecord
Résultat Prado\Data\ActiveRecord\TActiveRecord

fetchForeignObjects() protected méthode

Fetches the foreign objects using TActiveRecord::findAllByIndex()
protected fetchForeignObjects ( &$results, $foreignKeys, $indexValues, $sourceKeys )

getAssociationJoin() protected méthode

SQL inner join for M-N relationship via association table.
protected getAssociationJoin ( $foreignKeys, $indexValues, $sourceKeys ) : string
Résultat string inner join condition for M-N relationship via association table.

getAssociationTable() protected méthode

protected getAssociationTable ( ) : TDbTableInfo
Résultat TDbTableInfo association table information.

getAssociationTableCommandBuilder() protected méthode

protected getAssociationTableCommandBuilder ( ) : TDbCommandBuilder
Résultat TDbCommandBuilder

getCommandBuilder() protected méthode

protected getCommandBuilder ( ) : TDataGatewayCommand
Résultat TDataGatewayCommand

getForeignCommandBuilder() protected méthode

protected getForeignCommandBuilder ( ) : TDataGatewayCommand
Résultat TDataGatewayCommand

getForeignTable() protected méthode

protected getForeignTable ( ) : TDbTableInfo
Résultat TDbTableInfo foreign table information.

getRelationForeignKeys() public méthode

public getRelationForeignKeys ( ) : array
Résultat array 2 arrays of source keys and foreign keys from the association table.

getSourceColumns() protected méthode

protected getSourceColumns ( $sourceKeys ) : string
Résultat string comma separated source column names.

getSourceTable() protected méthode

protected getSourceTable ( ) : TDbTableInfo
Résultat TDbTableInfo source table information.

updateAssociatedRecords() public méthode

Updates the associated foreign objects.
public updateAssociatedRecords ( ) : boolean
Résultat boolean true if all update are success (including if no update was required), false otherwise .