コード例 #1
0
 public function addBook2library(Book2library $object)
 {
     $object->setBookId($this->getBookId());
     $object->setBook_Object($this);
     $this->getBook2library_Collection()->add($object);
     return $object;
 }
コード例 #2
0
 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());
 }