public function testReadOnlyRelations() { //add countries CountryTranslationQuery::create()->deleteAll(); CountryQuery::create()->deleteAll(); $stmt = $this->con->prepare('INSERT INTO country VALUES (?, ?)'); $stmt->execute(['fr', 'Paris']); $stmt->execute(['us', 'Washington']); $stmt->execute(['de', 'Berlin']); $stmt = $this->con->prepare('INSERT INTO country_translation (country_code, language_code, label) VALUES (?, ?, ?)'); $stmt->execute(['fr', 'fr_FR', 'France']); $stmt->execute(['us', 'us_US', 'United States America']); $stmt->execute(['de', 'de_DE', 'Berlin']); $contest = new Contest(); $contest->setName('Symfony Live 2014'); $contest->setCountryCode('fr'); $contest->save(); ContestTableMap::clearInstancePool(); $contestDb = ContestQuery::create()->joinWith('Contest.Country')->joinWith('Country.CountryTranslation')->findPk($contest->getId()); $translations = $contestDb->getCountry()->getCountryTranslations(); $this->assertCount(1, $translations); $this->assertEquals('France', $translations[0]->getLabel()); }
/** * Testing foreign keys with multiple referrer columns. * @link http://propel.phpdb.org/trac/ticket/606 */ public function testMultiColJoin() { BookstoreContestPeer::doDeleteAll(); BookstoreContestEntryPeer::doDeleteAll(); $bs = new Bookstore(); $bs->setStoreName("Test1"); $bs->setPopulationServed(5); $bs->save(); $bs1Id = $bs->getId(); $bs2 = new Bookstore(); $bs2->setStoreName("Test2"); $bs2->setPopulationServed(5); $bs2->save(); $bs2Id = $bs2->getId(); $ct1 = new Contest(); $ct1->setName("Contest1!"); $ct1->save(); $ct1Id = $ct1->getId(); $ct2 = new Contest(); $ct2->setName("Contest2!"); $ct2->save(); $ct2Id = $ct2->getId(); $cmr = new Customer(); $cmr->setName("Customer1"); $cmr->save(); $cmr1Id = $cmr->getId(); $cmr2 = new Customer(); $cmr2->setName("Customer2"); $cmr2->save(); $cmr2Id = $cmr2->getId(); $contest = new BookstoreContest(); $contest->setBookstoreId($bs1Id); $contest->setContestId($ct1Id); $contest->save(); $contest = new BookstoreContest(); $contest->setBookstoreId($bs2Id); $contest->setContestId($ct1Id); $contest->save(); $entry = new BookstoreContestEntry(); $entry->setBookstoreId($bs1Id); $entry->setContestId($ct1Id); $entry->setCustomerId($cmr1Id); $entry->save(); $entry = new BookstoreContestEntry(); $entry->setBookstoreId($bs1Id); $entry->setContestId($ct1Id); $entry->setCustomerId($cmr2Id); $entry->save(); // Note: this test isn't really working very well. We setup fkeys that // require that the BookstoreContest rows exist and then try to violate // the rules ... :-/ This may work in some lenient databases, but an error // is expected here. /* * Commented out for now ... though without it, this test may not really be testing anything $entry = new BookstoreContestEntry(); $entry->setBookstoreId($bs1Id); $entry->setContestId($ct2Id); $entry->setCustomerId($cmr2Id); $entry->save(); */ $c = new Criteria(); $c->addJoin(array(BookstoreContestEntryPeer::BOOKSTORE_ID, BookstoreContestEntryPeer::CONTEST_ID), array(BookstoreContestPeer::BOOKSTORE_ID, BookstoreContestPeer::CONTEST_ID)); $results = BookstoreContestEntryPeer::doSelect($c); $this->assertEquals(2, count($results)); foreach ($results as $result) { $this->assertEquals($bs1Id, $result->getBookstoreId()); $this->assertEquals($ct1Id, $result->getContestId()); } }