public function testManyToMany() { $library = new Library(); $library->setName('Travis County Reader'); $library->save(); $library2 = new Library(); $library2->setName('LBJ Center'); $library2->save(); $author = new Author(); $author->setName('Haruki Murakami'); $book = new Book(); $book->setTitle('Norwegian Wood'); $book->save(); $book2 = new Book(); $book2->setTitle('Kafka on the Shore'); $book2->save(); $author->addBook($book); $author->addBook($book2); $author->save(); $book2library = new Book2library(); $book2library->setBookId($book->getBookId()); $book2library->setLibraryId($library->getLibraryId()); $book2library->save(); $book2library2 = new Book2library(); $book2library2->setBookId($book2->getBookId()); $book2library2->setLibraryId($library->getLibraryId()); $book2library2->save(); $book2library3 = new Book2library(); $book2library3->setBookId($book->getBookId()); $book2library3->setLibraryId($library2->getLibraryId()); $book2library3->save(); $book2library4 = new Book2library(); $book2library4->setBookId($book2->getBookId()); $book2library4->setLibraryId($library2->getLibraryId()); $book2library4->save(); // now both books should be in both libraries $sameLibrary = Library::constructByKey($library->getLibraryId()); $bookJoinsInTravis = $sameLibrary->getBook2library_Collection(); // $this->dump($bookJoinsInTravis); $this->assertEqual(count($bookJoinsInTravis), 2); // This test is similar to the 4 that are commented out below, but this shows what is different // AND it ignores the creation_datetime and last_modified_datetime differences b/c they are // intentionally not autoloaded after a save. Just manually call load() after save if you want // to get the updated data. $mismatches = $this->getFieldMismatches($bookJoinsInTravis->getPosition(0)->getBook_Object(), $book); // Unset mistmatches that we know to be intentional if (isset($mismatches['creation_datetime'])) { unset($mismatches['creation_datetime']); } if (isset($mismatches['last_modified_datetime'])) { unset($mismatches['last_modified_datetime']); } $this->assertTrue(empty($mismatches), implode("\n", $mismatches)); // these fail because the $book and $book2 don't have some default values set after save like creation_datetime // (which is intentional; call load() after save if you want to get the updated data.) // $this->assertIdentical($bookJoinsInTravis->getPosition(0)->getBook_Object(), $book); // $this->assertIdentical($bookJoinsInTravis->getPosition(1)->getBook_Object(), $book2); $this->assertEqual($bookJoinsInTravis->getPosition(0)->getBook_Object()->getBookId(), $book->getBookId()); $this->assertEqual($bookJoinsInTravis->getPosition(1)->getBook_Object()->getBookId(), $book2->getBookId()); $sameLibrary2 = Library::constructByKey($library2->getLibraryId()); $bookJoinsInLbj = $sameLibrary2->getBook2library_Collection(); $this->assertEqual(count($bookJoinsInLbj), 2); // these fail because the $book and $book2 don't have some default values set after save like creation_datetime // (which is intentional; call load() after save if you want to get the updated data.) // $this->assertIdentical($bookJoinsInLbj->getPosition(0)->getBook_Object(), $book); // $this->assertIdentical($bookJoinsInLbj->getPosition(1)->getBook_Object(), $book2); $this->assertEqual($bookJoinsInLbj->getPosition(0)->getBook_Object()->getBookId(), $book->getBookId()); $this->assertEqual($bookJoinsInLbj->getPosition(1)->getBook_Object()->getBookId(), $book2->getBookId()); }
public function addBook2library(Book2library $object) { $object->setLibraryId($this->getLibraryId()); $object->setLibrary_Object($this); $this->getBook2library_Collection()->add($object); return $object; }