/** * Test removing object when FK is part of the composite PK */ public function testRemove_CompositePK() { BookReaderQuery::create()->deleteAll(); BookQuery::create()->deleteAll(); BookOpinionQuery::create()->deleteAll(); $br = new BookReader(); $br->setName("TestReader"); $br->save(); $b = new Book(); $b->setTitle("TestBook"); $b->setISBN("XX-XX-XX-XX"); $b->save(); $op = new BookOpinion(); $op->setBookReader($br); $op->setBook($b); $op->setRating(10); $op->setRecommendToFriend(true); $op->save(); $this->assertEquals(1, BookReaderQuery::create()->count(), '1 BookReader'); $this->assertEquals(1, BookQuery::create()->count(), '1 Book'); $this->assertEquals(1, BookOpinionQuery::create()->count(), '1 BookOpinion'); // make sure everything is loaded correctly (and their relation too) $br->reload(true); $b->reload(true); $op->reload(true); $br->getBookOpinions(); // load the relation $b->removeBookOpinion($op); $b->save(); // the Book knows that there is no longer an opinion $this->assertEquals(0, count($b->getBookOpinions()), 'Book knows there is no opinion'); // but not the BookReader $this->assertEquals(1, count($br->getBookOpinions()), 'BookReader still thinks it has 1 opinion'); $br->reload(true); // with relations $this->assertEquals(0, count($br->getBookOpinions()), 'BookReader now knows the opinion is gone'); $this->assertEquals(1, BookReaderQuery::create()->count(), '1 BookReader'); $this->assertEquals(1, BookQuery::create()->count(), '1 Book'); $this->assertEquals(0, BookOpinionQuery::create()->count(), '0 BookOpinion'); }
/** * Testing foreign keys with multiple referrer columns. * @link http://propel.phpdb.org/trac/ticket/606 */ public function testMultiColFk() { $con = Propel::getConnection(BookPeer::DATABASE_NAME); ReaderFavoritePeer::doDeleteAll(); $b1 = new Book(); $b1->setTitle("Book1"); $b1->setISBN("ISBN-1"); $b1->save(); $r1 = new BookReader(); $r1->setName("Me"); $r1->save(); $bo1 = new BookOpinion(); $bo1->setBookId($b1->getId()); $bo1->setReaderId($r1->getId()); $bo1->setRating(9); $bo1->setRecommendToFriend(true); $bo1->save(); $rf1 = new ReaderFavorite(); $rf1->setReaderId($r1->getId()); $rf1->setBookId($b1->getId()); $rf1->save(); $c = new Criteria(ReaderFavoritePeer::DATABASE_NAME); $c->add(ReaderFavoritePeer::BOOK_ID, $b1->getId()); $c->add(ReaderFavoritePeer::READER_ID, $r1->getId()); $results = ReaderFavoritePeer::doSelectJoinBookOpinion($c); $this->assertEquals(1, count($results), "Expected 1 result"); }
/** * Test copying when an object has composite primary key. * @link http://propel.phpdb.org/trac/ticket/618 */ public function testCopy_CompositePK() { $br = new BookReader(); $br->setName("TestReader"); $br->save(); $br->copy(); $b = new Book(); $b->setTitle("TestBook"); $b->setISBN("XX-XX-XX-XX"); $b->save(); $op = new BookOpinion(); $op->setBookReader($br); $op->setBook($b); $op->setRating(10); $op->setRecommendToFriend(true); $op->save(); $br2 = $br->copy(true); $this->assertNull($br2->getId()); $opinions = $br2->getBookOpinions(); $this->assertEquals(1, count($opinions), "Expected to have a related BookOpinion after copy()"); // We DO expect the reader_id to be null $this->assertNull($opinions[0]->getReaderId()); // but we DO NOT expect the book_id to be null $this->assertEquals($op->getBookId(), $opinions[0]->getBookId()); }
/** * @see testDoDeleteCompositePK() */ private function createReaderWithId($id) { $con = Propel::getConnection(BookReaderPeer::DATABASE_NAME); $r = BookReaderPeer::retrieveByPK($id); if (!$r) { $r = new BookReader(); $r->setName('Reader' . $id)->save(); $r1Id = $r->getId(); $sql = "UPDATE " . BookReaderPeer::TABLE_NAME . " SET id = ? WHERE id = ?"; $stmt = $con->prepare($sql); $stmt->bindValue(1, $id); $stmt->bindValue(2, $r1Id); $stmt->execute(); } }