Skip to content

Commit 6e64915

Browse files
author
floriansemm
committed
use getter to handle other data-types than objects, fixes #171
1 parent 2312aac commit 6e64915

File tree

6 files changed

+51
-18
lines changed

6 files changed

+51
-18
lines changed

Doctrine/Mapper/Factory/DocumentFactory.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,16 @@ public function createDocument(MetaInformationInterface $metaInformation)
5858
continue;
5959
}
6060

61-
$value = $field->getValue();
62-
if ($value instanceof Collection) {
61+
$fieldValue = $field->getValue();
62+
if ($fieldValue instanceof Collection) {
6363
$document->addField($field->getNameWithAlias(), $this->mapCollection($field, $metaInformation->getClassName()), $field->getBoost());
64-
} elseif (is_object($value)) {
64+
} elseif (is_object($fieldValue)) {
6565
$document->addField($field->getNameWithAlias(), $this->mapObject($field), $field->getBoost());
66+
} else if ($field->getter && $fieldValue) {
67+
$getterValue = $this->callGetterMethod($metaInformation->getEntity(), $field->getGetterName());
68+
$document->addField($field->getNameWithAlias(), $getterValue, $field->getBoost());
6669
} else {
67-
$document->addField($field->getNameWithAlias(), $field->getValue(), $field->getBoost());
70+
$document->addField($field->getNameWithAlias(), $fieldValue, $field->getBoost());
6871
}
6972

7073
if ($field->getFieldModifier()) {

Tests/Doctrine/Annotation/AnnotationReaderTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public function testGetFields_ThreeFieldsDetected()
4646
{
4747
$fields = $this->reader->getFields(new ValidTestEntity());
4848

49-
$this->assertEquals(4, count($fields), '4 fields are mapped');
49+
$this->assertEquals(5, count($fields), '5 fields are mapped');
5050
}
5151

5252
public function testGetFields_OneFieldsOneTypes()
@@ -81,7 +81,7 @@ public function testGetFieldMapping_ThreeMappingsAndId()
8181
{
8282
$fields = $this->reader->getFieldMapping(new ValidTestEntity());
8383

84-
$this->assertEquals(5, count($fields), 'five fields are mapped');
84+
$this->assertEquals(6, count($fields), 'six fields are mapped');
8585
$this->assertTrue(array_key_exists('title', $fields));
8686
$this->assertTrue(array_key_exists('id', $fields));
8787
}

Tests/Doctrine/Mapper/EntityMapperTest.php

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -369,23 +369,25 @@ public function mapRelationField_Getter()
369369
*/
370370
public function callGetterWithParameter()
371371
{
372-
$entity1 = new ValidTestEntity();
373-
$date = new \DateTime();
372+
$data = ['key' => 'value'];
374373

375-
$metaInformation = MetaTestInformationFactory::getMetaInformation($entity1);
376-
$metaInformation->setFields(array(
377-
new Field(array('name' => 'created_at', 'type' => 'datetime', 'boost' => '1', 'value' => $date, 'getter' => "format('d.m.Y')"))
378-
));
374+
$date = new \DateTime();
375+
$entity1 = new ValidTestEntity();
376+
$entity1->setId(uniqid());
377+
$entity1->setCreatedAt($date);
378+
$entity1->setComplexDataType(json_encode($data));
379379

380-
$fields = $metaInformation->getFields();
381-
$metaInformation->setFields($fields);
380+
$metaInformation = $this->metaInformationFactory->loadInformation($entity1);
382381

383382
$document = $this->mapper->toDocument($metaInformation);
384383

385384
$fields = $document->getFields();
386385

387386
$this->assertArrayHasKey('created_at_dt', $fields);
388387
$this->assertEquals($date->format('d.m.Y'), $fields['created_at_dt']);
388+
$this->assertArrayHasKey('complex_data_type', $fields);
389+
390+
$this->assertEquals($data, $fields['complex_data_type']);
389391
}
390392

391393
/**

Tests/Doctrine/Mapper/MetaInformationFactoryTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ public function testLoadInformation_ShouldLoadAll()
6666
$this->assertTrue($actual instanceof MetaInformation);
6767
$this->assertEquals($expectedClassName, $actual->getClassName(), 'wrong classname');
6868
$this->assertEquals($expectedDocumentName, $actual->getDocumentName(), 'wrong documentname');
69-
$this->assertEquals(4, count($actual->getFields()), '4 fields are set');
70-
$this->assertEquals(5, count($actual->getFieldMapping()), '5 fields are mapped');
69+
$this->assertEquals(5, count($actual->getFields()), '5 fields are set');
70+
$this->assertEquals(6, count($actual->getFieldMapping()), '5 fields are mapped');
7171
}
7272

7373
public function testLoadInformation_LoadInformationFromObject()
@@ -86,7 +86,7 @@ public function testLoadInformation_LoadInformationFromObject()
8686
$this->assertTrue($actual instanceof MetaInformation);
8787
$this->assertEquals($expectedClassName, $actual->getClassName(), 'wrong classname');
8888
$this->assertEquals($expectedDocumentName, $actual->getDocumentName(), 'wrong documentname');
89-
$this->assertEquals(4, count($actual->getFields()), '4 fields are mapped');
89+
$this->assertEquals(5, count($actual->getFields()), '5 fields are mapped');
9090

9191
$this->assertTrue($actual->hasField('title'), 'field should be able to located by field-name');
9292
$this->assertTrue($actual->hasField('text_t'), 'field should be able to located by field-name with suffix');

Tests/Fixtures/ValidTestEntity.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,13 @@ class ValidTestEntity
6060
*/
6161
private $privateField;
6262

63+
/**
64+
* @var array
65+
*
66+
* @Solr\Field(name="complex_data_type", getter="getComplexData")
67+
*/
68+
private $complexDataType;
69+
6370
/**
6471
* @return int
6572
*/
@@ -187,5 +194,26 @@ public function setPublishDate($publishDate)
187194
{
188195
$this->publishDate = $publishDate;
189196
}
197+
198+
/**
199+
* @return array
200+
*/
201+
public function getComplexDataType()
202+
{
203+
return $this->complexDataType;
204+
}
205+
206+
/**
207+
* @param string $complexDataType
208+
*/
209+
public function setComplexDataType($complexDataType)
210+
{
211+
$this->complexDataType = $complexDataType;
212+
}
213+
214+
public function getComplexData()
215+
{
216+
return json_decode($this->complexDataType, true);
217+
}
190218
}
191219

Tests/SolrTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public function testCreateQuery_ValidEntity()
3636
$query = $this->solr->createQuery(ValidTestEntity::class);
3737

3838
$this->assertTrue($query instanceof SolrQuery);
39-
$this->assertEquals(5, count($query->getMappedFields()));
39+
$this->assertEquals(6, count($query->getMappedFields()));
4040

4141
}
4242

0 commit comments

Comments
 (0)