Get the value of an index
public getIndexValue ( Bravo3\Orm\Mappers\Metadata\Index $index ) : string | ||
$index | Bravo3\Orm\Mappers\Metadata\Index | |
return | string |
/** * @dataProvider entityManagerDataProvider * @param EntityManager $em */ public function testIndex(EntityManager $em) { $entity = new IndexedEntity(); $entity->setId1(100)->setId2('id2'); $entity->setAlpha('alpha')->setBravo('200')->setCharlie(true); $metadata = $em->getMapper()->getEntityMetadata($entity); $reader = new Reader($metadata, $entity); $this->assertEquals('100.id2', $reader->getId()); $indices = $metadata->getIndices(); $this->assertCount(3, $indices); $ab = $metadata->getIndexByName('ab'); $this->assertContains('alpha', $ab->getColumns()); $this->assertContains('bravo', $ab->getColumns()); $this->assertCount(2, $ab->getColumns()); $this->assertEquals('alpha.200', $reader->getIndexValue($ab)); $bc = $metadata->getIndexByName('bc'); $this->assertContains('bravo', $bc->getColumns()); $this->assertContains('getCharlie', $bc->getMethods()); $this->assertCount(1, $bc->getColumns()); $this->assertCount(1, $bc->getMethods()); $this->assertEquals('200.1', $reader->getIndexValue($bc)); $b = $metadata->getIndexByName('b'); $this->assertContains('bravo', $b->getColumns()); $this->assertCount(1, $b->getColumns()); $this->assertEquals('200', $reader->getIndexValue($b)); $em->persist($entity)->flush(); /** @var IndexedEntity $retrieved */ $retrieved = $em->retrieve(self::INDEXED_ENTITY, '100.id2'); $retrieved->setAlpha('omega')->setId1(101); $em->persist($retrieved)->flush(); try { $em->retrieveByIndex(self::INDEXED_ENTITY, 'ab', 'alpha.200'); $this->fail("Former index was found"); } catch (NotFoundException $e) { } /** @var IndexedEntity $retrieved_by_index */ $retrieved_by_index = $em->retrieveByIndex(self::INDEXED_ENTITY, 'ab', 'omega.200'); $this->assertEquals(101, $retrieved_by_index->getId1()); $this->assertEquals('id2', $retrieved_by_index->getId2()); $this->assertSame('omega', $retrieved_by_index->getAlpha()); $this->assertSame(200, $retrieved_by_index->getBravo()); $this->assertSame(true, $retrieved_by_index->getCharlie()); }
/** * Traverse an array of indices and persist them * * @param Index[] $indices * @param object $entity * @param Reader $reader * @param string $local_id */ private function traverseDeleteIndices(array $indices, $entity, Reader $reader, $local_id) { $is_proxy = $entity instanceof OrmProxyInterface; foreach ($indices as $index) { if ($is_proxy) { /** @var OrmProxyInterface $entity */ $index_value = $entity->getIndexOriginalValue($index->getName()); } else { $index_value = $reader->getIndexValue($index); } $this->getDriver()->clearSingleValueIndex($this->getKeyScheme()->getIndexKey($index, $index_value)); } }