예제 #1
0
 public function testManyEmbeddedReference()
 {
     $user = new \Documents\User();
     $user->addPhonenumber(new Phonenumber('6155139185'));
     $user->addPhonenumber(new Phonenumber('6153303769'));
     $this->dm->persist($user);
     $this->dm->flush();
     $this->dm->clear();
     $user2 = $this->dm->createQuery('Documents\\User')->where('id', $user->getId())->getSingleResult();
     $this->assertEquals($user->getPhonenumbers(), $user2->getPhonenumbers());
 }
예제 #2
0
 public function testManyEmbedded()
 {
     $user = new \Documents\User();
     $user->addPhonenumber(new Phonenumber('6155139185'));
     $user->addPhonenumber(new Phonenumber('6153303769'));
     $this->dm->persist($user);
     $this->dm->flush();
     $this->dm->clear();
     $user2 = $this->dm->createQueryBuilder('Documents\\User')->field('id')->equals($user->getId())->getQuery()->getSingleResult();
     $this->assertNotNull($user2);
     $this->assertEquals($user->getPhonenumbers()->toArray(), $user2->getPhonenumbers()->toArray());
 }
 public function testFindByEmbedMany()
 {
     $user = new User();
     $phonenumber = new Phonenumber('12345678');
     $user->addPhonenumber($phonenumber);
     $this->dm->persist($user);
     $this->dm->flush();
     $this->assertSame($user, $this->dm->getRepository(User::class)->findOneBy(['phonenumbers' => $phonenumber]));
 }
예제 #4
0
 public function testAddElemMatch()
 {
     $user = new User();
     $user->setUsername('boo');
     $phonenumber = new Phonenumber('6155139185');
     $user->addPhonenumber($phonenumber);
     $this->dm->persist($user);
     $this->dm->flush();
     $qb = $this->dm->createQueryBuilder('Documents\\User');
     $qb->field('phonenumbers')->elemMatch($qb->expr()->field('phonenumber')->equals('6155139185'));
     $query = $qb->getQuery();
     $user = $query->getSingleResult();
     $this->assertNotNull($user);
 }
예제 #5
0
 public function testAddElemMatchWithDeepFields()
 {
     $user1 = new User();
     $user1->setUsername('ben');
     $user2 = new User();
     $user2->setUsername('boo');
     $phonenumber = new Phonenumber('2125550123', $user1);
     $user2->addPhonenumber($phonenumber);
     $this->dm->persist($user1);
     $this->dm->persist($user2);
     $this->dm->flush();
     $qb = $this->dm->createQueryBuilder('Documents\\User');
     $embeddedQb = $this->dm->createQueryBuilder('Documents\\Phonenumber');
     $qb->field('phonenumbers')->elemMatch($embeddedQb->expr()->field('lastCalledBy.$id')->equals(new \MongoId($user1->getId())));
     $query = $qb->getQuery();
     $user = $query->getSingleResult();
     $this->assertNotNull($user);
 }
예제 #6
0
 public function testUpdateCollectionDuringOnFlushAndRecomputSingleDocumentChangeSet()
 {
     // create a test document
     $test = new User();
     $test->setUsername('toby');
     $test->addPhonenumber(new Phonenumber('1111'));
     $this->dm->persist($test);
     $this->dm->flush();
     $test->setUsername('lucy');
     $this->dm->flush();
     $this->dm->clear();
     $repository = $this->dm->getRepository(get_class($test));
     $test = $repository->findOneBy(array('username' => 'lucy'));
     $phonenumbers = array();
     foreach ($test->getPhonenumbers() as $phonenumber) {
         $phonenumbers[] = $phonenumber->getPhonenumber();
     }
     sort($phonenumbers);
     $this->assertEquals(array('1111', '2222'), $phonenumbers);
 }
예제 #7
0
 public function testRemoveEmbeddedDocument()
 {
     $address = new Address();
     $address->setAddress('6512 Mercomatic Ct.');
     $user = new User();
     $user->setUsername('jwagettt');
     $user->setAddress($address);
     $user->addPhonenumber(new Phonenumber('6155139185'));
     $user->addPhonenumber(new Phonenumber('6155139185'));
     $this->dm->persist($user);
     $this->dm->flush();
     $user->removeAddress();
     $user->getPhonenumbers()->remove(0);
     $user->getPhonenumbers()->remove(1);
     $this->dm->flush();
     $check = $this->dm->getDocumentCollection('Documents\\User')->findOne();
     $this->assertEmpty($check['phonenumbers']);
     $this->assertFalse(isset($check['address']));
 }
예제 #8
0
 public function testPrimeEmbeddedReferenceOneLevelDeep()
 {
     $user1 = new User();
     $user2 = new User();
     $phone = new Phonenumber('555-GET-THIS', $user2);
     $user1->addPhonenumber($phone);
     $user1->setUsername('SomeName');
     $this->dm->persist($user1);
     $this->dm->persist($user2);
     $this->dm->flush();
     $this->dm->clear();
     $qb = $this->dm->createQueryBuilder('Documents\\User')->field('username')->equals('SomeName')->field('phonenumbers.lastCalledBy')->prime(true);
     $user = $qb->getQuery()->getSingleResult();
     $phonenumbers = $user->getPhonenumbers();
     $this->assertCount(1, $phonenumbers);
     $phonenumber = $phonenumbers->current();
     $this->assertNotInstanceOf('Doctrine\\ODM\\MongoDB\\Proxy\\Proxy', $phonenumber);
     $this->assertInstanceOf('Documents\\Phonenumber', $phonenumber);
 }
 public function testSchedulingCollectionDeletionAfterSchedulingForUpdate()
 {
     $user = new User();
     $user->addPhonenumber(new Phonenumber('12345678'));
     $this->dm->persist($user);
     $this->dm->flush();
     $user->addPhonenumber(new Phonenumber('87654321'));
     $this->uow->computeChangeSet($this->dm->getClassMetadata(get_class($user)), $user);
     $this->assertTrue($this->uow->isCollectionScheduledForUpdate($user->getPhonenumbers()));
     $this->assertFalse($this->uow->isCollectionScheduledForDeletion($user->getPhonenumbers()));
     $user->getPhonenumbers()->clear();
     $this->uow->computeChangeSet($this->dm->getClassMetadata(get_class($user)), $user);
     $this->assertFalse($this->uow->isCollectionScheduledForUpdate($user->getPhonenumbers()));
     $this->assertTrue($this->uow->isCollectionScheduledForDeletion($user->getPhonenumbers()));
     $this->ql->clear();
     $this->dm->flush();
     $this->dm->clear();
     $user = $this->dm->find(get_class($user), $user->getId());
     $this->assertCount(0, $user->getPhonenumbers());
 }
예제 #10
0
$classLoader->register();
$config = new Configuration();
/*
$config->setLoggerCallable(function(array $log) {
    print_r($log);
});
$config->setMetadataCacheImpl(new ApcCache());
*/
$config->setProxyDir(__DIR__ . '/Proxies');
$config->setProxyNamespace('Proxies');
$reader = new AnnotationReader();
$reader->setDefaultAnnotationNamespace('Doctrine\\ODM\\MongoDB\\Mapping\\');
$config->setMetadataDriverImpl(new AnnotationDriver($reader, __DIR__ . '/Documents'));
//$config->setMetadataDriverImpl(new XmlDriver(__DIR__ . '/xml'));
//$config->setMetadataDriverImpl(new YamlDriver(__DIR__ . '/yaml'));
//$config->setMetadataDriverImpl(new PHPDriver());
$dm = DocumentManager::create(new Mongo(), $config);
$profile = new Profile();
$profile->setName('Jonathan H. Wage');
$profile->addSong(new Song('Testinfuckckcg'));
$user = new User();
$user->setUsername('jwage');
$user->setPassword('changeme');
$user->addPhonenumber(new Phonenumber('6155139185'));
$user->setProfile($profile);
$configuration = new ConfigurationDoc();
$configuration->setTimezone('Eastern');
$configuration->setTheme('doctrine');
$user->setConfiguration($configuration);
$dm->persist($user);
$dm->flush();