Class TActiveRecordHasManyAssociation
Implements the M-N (many to many) relationship via association table. 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.
- TActiveRecordRelation
-
TActiveRecordHasManyAssociation
Copyright: Copyright © 2005-2014 PradoSoft
License: http://www.pradosoft.com/license/
Author: Wei Zhuo <weizho[at]gmail[dot]com>
Version: $Id$
Since: 3.1
Located at Data/ActiveRecord/Relations/TActiveRecordHasManyAssociation.php
protected
|
#
collectForeignObjects( array & $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. |
public
array
|
|
protected
|
|
protected
|
|
protected
|
|
protected
|
|
protected
|
|
protected
|
#
fetchForeignObjects( array & $results, array $foreignKeys, mixed $indexValues, mixed $sourceKeys )
Fetches the foreign objects using TActiveRecord::findAllByIndex() |
protected
|
|
public
|
#
createCommand(
|
protected
string
|
|
protected
string
|
#
getAssociationJoin( array $foreignKeys, array $indexValues, array $sourceKeys )
SQL inner join for M-N relationship via association table. |
public
boolean
|
|
protected
|