PHP Класс 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.
С версии: 3.1
Наследование: extends TActiveRecordRelation
Показать файл Открыть проект

Открытые методы

Метод Описание
createCommand ( $criteria, $foreignKeys, $indexValues, $sourceKeys )
getRelationForeignKeys ( ) : array
updateAssociatedRecords ( ) : boolean Updates the associated foreign objects.

Защищенные методы

Метод Описание
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

Приватные методы

Метод Описание
addAssociationData ( $builder, $data )
getForeignObjectValues ( $foreignKeys, $fkObject )
getSourceRecordValues ( $obj )
hasAssociationData ( $builder, $data )
updateAssociationTable ( $obj, $fkObjects, $builder )

Описание методов

collectForeignObjects() защищенный Метод

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 createCommand ( $criteria, $foreignKeys, $indexValues, $sourceKeys )

createFkObject() защищенный Метод

protected createFkObject ( $type, $row, $foreignKeys ) : TActiveRecord
Результат Prado\Data\ActiveRecord\TActiveRecord

fetchForeignObjects() защищенный Метод

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

getAssociationJoin() защищенный Метод

SQL inner join for M-N relationship via association table.
protected getAssociationJoin ( $foreignKeys, $indexValues, $sourceKeys ) : string
Результат string inner join condition for M-N relationship via association table.

getAssociationTable() защищенный Метод

protected getAssociationTable ( ) : TDbTableInfo
Результат TDbTableInfo association table information.

getAssociationTableCommandBuilder() защищенный Метод

protected getAssociationTableCommandBuilder ( ) : TDbCommandBuilder
Результат TDbCommandBuilder

getCommandBuilder() защищенный Метод

protected getCommandBuilder ( ) : TDataGatewayCommand
Результат TDataGatewayCommand

getForeignCommandBuilder() защищенный Метод

protected getForeignCommandBuilder ( ) : TDataGatewayCommand
Результат TDataGatewayCommand

getForeignTable() защищенный Метод

protected getForeignTable ( ) : TDbTableInfo
Результат TDbTableInfo foreign table information.

getRelationForeignKeys() публичный Метод

public getRelationForeignKeys ( ) : array
Результат array 2 arrays of source keys and foreign keys from the association table.

getSourceColumns() защищенный Метод

protected getSourceColumns ( $sourceKeys ) : string
Результат string comma separated source column names.

getSourceTable() защищенный Метод

protected getSourceTable ( ) : TDbTableInfo
Результат TDbTableInfo source table information.

updateAssociatedRecords() публичный Метод

Updates the associated foreign objects.
public updateAssociatedRecords ( ) : boolean
Результат boolean true if all update are success (including if no update was required), false otherwise .