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
显示文件 Open project: pradosoft/prado

Public Methods

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

Protected Methods

Method 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

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

Method Details

collectForeignObjects() protected method

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 method

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

createFkObject() protected method

protected createFkObject ( $type, $row, $foreignKeys ) : TActiveRecord
return Prado\Data\ActiveRecord\TActiveRecord

fetchForeignObjects() protected method

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

getAssociationJoin() protected method

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

getAssociationTable() protected method

protected getAssociationTable ( ) : TDbTableInfo
return TDbTableInfo association table information.

getAssociationTableCommandBuilder() protected method

protected getAssociationTableCommandBuilder ( ) : TDbCommandBuilder
return TDbCommandBuilder

getCommandBuilder() protected method

protected getCommandBuilder ( ) : TDataGatewayCommand
return TDataGatewayCommand

getForeignCommandBuilder() protected method

protected getForeignCommandBuilder ( ) : TDataGatewayCommand
return TDataGatewayCommand

getForeignTable() protected method

protected getForeignTable ( ) : TDbTableInfo
return TDbTableInfo foreign table information.

getRelationForeignKeys() public method

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

getSourceColumns() protected method

protected getSourceColumns ( $sourceKeys ) : string
return string comma separated source column names.

getSourceTable() protected method

protected getSourceTable ( ) : TDbTableInfo
return TDbTableInfo source table information.

updateAssociatedRecords() public method

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