Ejemplo n.º 1
0
 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;
 }
Ejemplo n.º 2
0
 public function testUseQueryJoinWithFind()
 {
     $c = new ModelCriteria('bookstore', 'Review');
     $c->joinWith('Book');
     $c2 = $c->useQuery('Book');
     $joins = $c->getJoins();
     $this->assertEquals($c->getPreviousJoin(), null, 'The default value for previousJoin remains null');
     $this->assertEquals($c2->getPreviousJoin(), $joins['Book'], 'useQuery() sets the previousJoin');
     // join Book with Author, which is possible since previousJoin is set, which makes resolving of relations possible during hydration
     $c2->joinWith('Author');
     $c = $c2->endUse();
     $con = Propel::getConnection(BookPeer::DATABASE_NAME);
     $c->find($con);
     $expectedSQL = "SELECT review.ID, review.REVIEWED_BY, review.REVIEW_DATE, review.RECOMMENDED, review.STATUS, review.BOOK_ID, book.ID, book.TITLE, book.ISBN, book.PRICE, book.PUBLISHER_ID, book.AUTHOR_ID, author.ID, author.FIRST_NAME, author.LAST_NAME, author.EMAIL, author.AGE FROM `review` INNER JOIN `book` ON (review.BOOK_ID=book.ID) INNER JOIN `author` ON (book.AUTHOR_ID=author.ID)";
     $this->assertEquals($expectedSQL, $con->getLastExecutedQuery(), 'useQuery() and joinWith() can be used together and form a correct query');
 }
 public function testUseQueryJoinWithFind()
 {
     $c = new ModelCriteria('bookstore', 'Review');
     $c->joinWith('Book');
     $c2 = $c->useQuery('Book');
     $joins = $c->getJoins();
     $this->assertEquals($c->getPreviousJoin(), null, 'The default value for previousJoin remains null');
     $this->assertEquals($c2->getPreviousJoin(), $joins['Book'], 'useQuery() sets the previousJoin');
     // join Book with Author, which is possible since previousJoin is set, which makes resolving of relations possible during hydration
     $c2->joinWith('Author');
     $c = $c2->endUse();
     $con = Propel::getConnection(BookPeer::DATABASE_NAME);
     $c->find($con);
     $expectedSQL = "SELECT review.id, review.reviewed_by, review.review_date, review.recommended, review.status, review.book_id, book.id, book.title, book.isbn, book.price, book.publisher_id, book.author_id, author.id, author.first_name, author.last_name, author.email, author.age FROM `review` INNER JOIN `book` ON (review.book_id=book.id) INNER JOIN `author` ON (book.author_id=author.id)";
     $this->assertEquals($expectedSQL, $con->getLastExecutedQuery(), 'useQuery() and joinWith() can be used together and form a correct query');
 }