public static function create(\ModelCriteria $q, $relation, $relationAlias = null, $joinType = \Criteria::INNER_JOIN) { $tableMap = $q->getTableMap(); $relationMap = $tableMap->getRelation($relation); // create a Join object for this join $join = new static(); $join->setJoinType($joinType); $join->setRelationMap($relationMap, $q->getModelAlias(), $relationAlias); if ($previousJoin = $q->getPreviousJoin()) { $join->setPreviousJoin($previousJoin); } // add the ModelJoin to the current object if ($relationAlias) { $q->addAlias($relationAlias, $relationMap->getRightTable()->getName()); $q->addJoinObject($join, $relationAlias); } else { $q->addJoinObject($join, $relationMap->getRightTable()->getName()); } return $join; }
public function testJoinDuplicate() { $c = new ModelCriteria('bookstore', 'Author'); $c->addJoinObject(new Join('tbl.COL1', 'tbl.COL2', 'LEFT JOIN')); $c->addJoinObject(new Join('tbl.COL1', 'tbl.COL2', 'LEFT JOIN')); $this->assertEquals(1, count($c->getJoins()), 'Expected not to have duplicate LEFT JOIN added.'); $c->addJoinObject(new Join('tbl.COL1', 'tbl.COL2', 'RIGHT JOIN')); $c->addJoinObject(new Join('tbl.COL1', 'tbl.COL2', 'RIGHT JOIN')); $this->assertEquals(2, count($c->getJoins()), 'Expected 1 new right join to be added.'); $c->addJoinObject(new Join('tbl.COL1', 'tbl.COL2')); $c->addJoinObject(new Join('tbl.COL1', 'tbl.COL2')); $this->assertEquals(3, count($c->getJoins()), 'Expected 1 new implicit join to be added.'); $c->addJoinObject(new Join('tbl.COL1', 'tbl.COL2', 'INNER JOIN')); $this->assertEquals(3, count($c->getJoins()), 'Expected to not add any new join as INNER JOIN is default joinType and it is already added'); $c->addJoinObject(new Join('tbl.COL3', 'tbl.COL4')); $this->assertEquals(4, count($c->getJoins()), "Expected new col join to be added."); }