getLeftColumns(); $rightCols = $relationMap->getRightColumns(); $nbColumns = $relationMap->countColumnMappings(); for ($i=0; $i < $nbColumns; $i++) { $leftColName = ($leftTableAlias ? $leftTableAlias : $leftCols[$i]->getTableName()) . '.' . $leftCols[$i]->getName(); $rightColName = ($relationAlias ? $relationAlias : $rightCols[$i]->getTableName()) . '.' . $rightCols[$i]->getName(); $this->addCondition($leftColName, $rightColName, Criteria::EQUAL); } $this->relationMap = $relationMap; $this->leftTableAlias = $leftTableAlias; $this->relationAlias = $relationAlias; return $this; } public function getRelationMap() { return $this->relationMap; } /** * Sets the right tableMap for this join * * @param TableMap $tableMap The table map to use * * @return ModelJoin The current join object, for fluid interface */ public function setTableMap(TableMap $tableMap) { $this->tableMap = $tableMap; return $this; } /** * Gets the right tableMap for this join * * @return TableMap The table map */ public function getTableMap() { if (null === $this->tableMap && null !== $this->relationMap) { $this->tableMap = $this->relationMap->getRightTable(); } return $this->tableMap; } public function setPreviousJoin(ModelJoin $join) { $this->previousJoin = $join; return $this; } public function getPreviousJoin() { return $this->previousJoin; } public function isPrimary() { return null === $this->previousJoin; } public function setLeftTableAlias($leftTableAlias) { $this->leftTableAlias = $leftTableAlias; return $this; } public function getLeftTableAlias() { return $this->leftTableAlias; } public function hasLeftTableAlias() { return null !== $this->leftTableAlias; } public function setRelationAlias($relationAlias) { $this->relationAlias = $relationAlias; return $this; } public function getRelationAlias() { return $this->relationAlias; } public function hasRelationAlias() { return null !== $this->relationAlias; } /** * This method returns the last related, but already hydrated object up until this join * Starting from $startObject and continuously calling the getters to get * to the base object for the current join. * * This method only works if PreviousJoin has been defined, * which only happens when you provide dotted relations when calling join * * @param Object $startObject the start object all joins originate from and which has already hydrated * @return Object the base Object of this join */ public function getObjectToRelate($startObject) { if($this->isPrimary()) { return $startObject; } else { $previousJoin = $this->getPreviousJoin(); $previousObject = $previousJoin->getObjectToRelate($startObject); $method = 'get' . $previousJoin->getRelationMap()->getName(); return $previousObject->$method(); } } public function equals($join) { return parent::equals($join) && $this->relationMap == $join->getRelationMap() && $this->previousJoin == $join->getPreviousJoin() && $this->relationAlias == $join->getRelationAlias(); } public function __toString() { return parent::toString() . ' tableMap: ' . ($this->tableMap ? get_class($this->tableMap) : 'null') . ' relationMap: ' . $this->relationMap->getName() . ' previousJoin: ' . ($this->previousJoin ? '(' . $this->previousJoin . ')' : 'null') . ' relationAlias: ' . $this->relationAlias; } }