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.
Показать файл
Открыть проект
Открытые методы
Защищенные методы
Приватные методы
Описание методов
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.
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()
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()
защищенный Метод
getCommandBuilder()
защищенный Метод
getForeignCommandBuilder()
защищенный Метод
getForeignTable()
защищенный Метод
protected getForeignTable ( ) : TDbTableInfo |
Результат |
TDbTableInfo |
foreign table information. |
getRelationForeignKeys()
публичный Метод
getSourceColumns()
защищенный Метод
getSourceTable()
защищенный Метод
protected getSourceTable ( ) : TDbTableInfo |
Результат |
TDbTableInfo |
source table information. |
updateAssociatedRecords()
публичный Метод
Updates the associated foreign objects.