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.
파일 보기
프로젝트 열기: pradosoft/prado
공개 메소드들
보호된 메소드들
비공개 메소드들
메소드 상세
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.
public createCommand ( $criteria, $foreignKeys, $indexValues, $sourceKeys ) |
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()
보호된 메소드
protected getSourceTable ( ) : TDbTableInfo |
리턴 |
TDbTableInfo |
source table information. |
updateAssociatedRecords()
공개 메소드
Updates the associated foreign objects.