/** * Construct new Join Association. * * @param object $reflection * @param object $joinDependency * @param object $parent */ public function __construct(Mad_Model_Association_Base $reflection, Mad_Model_Join_Dependency $joinDependency, Mad_Model_Join_Base $parent) { parent::__construct($reflection->getAssocModel()); $this->_parent = $parent; $this->_reflection = $reflection; $this->_aliasedPrefix = 'T' . sizeof($joinDependency->joins()); $this->_aliasedTableName = $this->tableName(); // start with table name $this->_parentTableName = $parent->model()->tableName(); // if the table name has been used, then use an alias $alias = $this->_aliasedTableName; if ($joinDependency->tableAlias($this->_aliasedTableName)) { $alias = $reflection->getAssocTable() . "_{$this->_parentTableName}"; $this->_aliasedTableName = $this->_model->connection->tableAliasFor($alias); // make sure to get a unique name. careful of name restrictions $alias = $this->_aliasedTableName; $i = $joinDependency->tableAlias($alias); if ($i > 0) { $maxLen = $this->_model->connection->tableAliasLength() - 3; $this->_aliasedTableName = substr($this->_aliasedTableName, 0, $maxLen) . "_" . ($i + 1); } } $joinDependency->addTableAlias($alias); // create alias for join table (only should be executed for hasAndBelongsToMany|belongsTo if ($this->_aliasedJoinTableName = $this->_reflection->getJoinTable()) { if ($joinDependency->tableAlias($this->_aliasedJoinTableName)) { $alias = $reflection->getAssocTable() . '_' . $this->_parentTableName . '_join'; $this->_aliasedJoinTableName = $this->_model->connection->tableAliasFor($alias); // make sure to get a unique name. careful of oracle name restrictions $i = $joinDependency->tableAlias($this->_aliasedJoinTableName); if ($i > 0) { $maxLen = $this->_model->connection->tableAliasLength() - 3; $this->_aliasedJoinTableName = substr($this->_aliasedJoinTableName, 0, $maxLen) . "_" . ($i + 1); } } $joinDependency->addTableAlias($this->_aliasedJoinTableName); } }