Fix parent mapping
This commit is contained in:
parent
9d5a0c2ed9
commit
a386ffefe3
|
@ -287,6 +287,7 @@ class Configuration implements ConfigurationInterface
|
||||||
->append($this->getSourceNode())
|
->append($this->getSourceNode())
|
||||||
->append($this->getBoostNode())
|
->append($this->getBoostNode())
|
||||||
->append($this->getRoutingNode())
|
->append($this->getRoutingNode())
|
||||||
|
->append($this->getParentNode())
|
||||||
->end()
|
->end()
|
||||||
;
|
;
|
||||||
|
|
||||||
|
@ -338,13 +339,7 @@ class Configuration implements ConfigurationInterface
|
||||||
->scalarNode('index_options')->end()
|
->scalarNode('index_options')->end()
|
||||||
->scalarNode('ignore_above')->end()
|
->scalarNode('ignore_above')->end()
|
||||||
->scalarNode('position_offset_gap')->end()
|
->scalarNode('position_offset_gap')->end()
|
||||||
->arrayNode('_parent')
|
;
|
||||||
->treatNullLike(array())
|
|
||||||
->children()
|
|
||||||
->scalarNode('type')->end()
|
|
||||||
->scalarNode('identifier')->defaultValue('id')->end()
|
|
||||||
->end()
|
|
||||||
->end();
|
|
||||||
|
|
||||||
if (isset($nestings['fields'])) {
|
if (isset($nestings['fields'])) {
|
||||||
$this->addNestedFieldConfig($node, $nestings, 'fields');
|
$this->addNestedFieldConfig($node, $nestings, 'fields');
|
||||||
|
@ -516,4 +511,23 @@ class Configuration implements ConfigurationInterface
|
||||||
|
|
||||||
return $node;
|
return $node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the array node used for "_parent".
|
||||||
|
*/
|
||||||
|
protected function getParentNode()
|
||||||
|
{
|
||||||
|
$builder = new TreeBuilder();
|
||||||
|
$node = $builder->root('_parent');
|
||||||
|
|
||||||
|
$node
|
||||||
|
->children()
|
||||||
|
->scalarNode('type')->end()
|
||||||
|
->scalarNode('property')->end()
|
||||||
|
->scalarNode('identifier')->defaultValue('id')->end()
|
||||||
|
->end()
|
||||||
|
;
|
||||||
|
|
||||||
|
return $node;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -214,6 +214,11 @@ class FOSElasticaExtension extends Extension
|
||||||
$typeName = sprintf('%s/%s', $indexName, $name);
|
$typeName = sprintf('%s/%s', $indexName, $name);
|
||||||
$this->typeFields[$typeName] = $type['mappings'];
|
$this->typeFields[$typeName] = $type['mappings'];
|
||||||
}
|
}
|
||||||
|
if (isset($type['_parent'])) {
|
||||||
|
$this->indexConfigs[$indexName]['config']['mappings'][$name]['_parent'] = array('type' => $type['_parent']['type']);
|
||||||
|
$typeName = sprintf('%s/%s', $indexName, $name);
|
||||||
|
$this->typeFields[$typeName]['_parent'] = $type['_parent'];
|
||||||
|
}
|
||||||
if (isset($type['persistence'])) {
|
if (isset($type['persistence'])) {
|
||||||
$this->loadTypePersistenceIntegration($type['persistence'], $container, $typeDef, $indexName, $name);
|
$this->loadTypePersistenceIntegration($type['persistence'], $container, $typeDef, $indexName, $name);
|
||||||
}
|
}
|
||||||
|
@ -476,5 +481,4 @@ class FOSElasticaExtension extends Extension
|
||||||
|
|
||||||
$container->setAlias('fos_elastica.manager', sprintf('fos_elastica.manager.%s', $defaultManagerService));
|
$container->setAlias('fos_elastica.manager', sprintf('fos_elastica.manager.%s', $defaultManagerService));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -178,9 +178,9 @@ per type.
|
||||||
types:
|
types:
|
||||||
comment:
|
comment:
|
||||||
mappings:
|
mappings:
|
||||||
post: {_parent: { type: "post", identifier: "id" } }
|
|
||||||
date: { boost: 5 }
|
date: { boost: 5 }
|
||||||
content: ~
|
content: ~
|
||||||
|
_parent: { type: "post", property: "post", identifier: "id" }
|
||||||
|
|
||||||
### Declaring `nested` or `object`
|
### Declaring `nested` or `object`
|
||||||
|
|
||||||
|
|
|
@ -74,10 +74,8 @@ class Resetter
|
||||||
{
|
{
|
||||||
$mapping = Mapping::create($indexConfig['properties']);
|
$mapping = Mapping::create($indexConfig['properties']);
|
||||||
|
|
||||||
foreach($indexConfig['properties'] as $type) {
|
if (isset($indexConfig['_parent'])) {
|
||||||
if (!empty($type['_parent']) && $type['_parent'] !== '~') {
|
$mapping->setParam('_parent', array('type' => $indexConfig['_parent']['type']));
|
||||||
$mapping->setParam('_parent', array('type' => $type['_parent']['type']));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $mapping;
|
return $mapping;
|
||||||
|
|
|
@ -34,9 +34,16 @@ class ResetterTest extends \PHPUnit_Framework_TestCase
|
||||||
'index' => $this->getMockElasticaIndex(),
|
'index' => $this->getMockElasticaIndex(),
|
||||||
'config' => array(
|
'config' => array(
|
||||||
'mappings' => array(
|
'mappings' => array(
|
||||||
'a' => array('properties' => array(
|
'a' => array(
|
||||||
'field_1' => array('_parent' => array('type' => 'b', 'identifier' => 'id')),
|
'properties' => array(
|
||||||
'field_2' => array())),
|
'field_2' => array()
|
||||||
|
),
|
||||||
|
'_parent' => array(
|
||||||
|
'type' => 'b',
|
||||||
|
'property' => 'b',
|
||||||
|
'identifier' => 'id'
|
||||||
|
),
|
||||||
|
),
|
||||||
'b' => array('properties' => array()),
|
'b' => array('properties' => array()),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
@ -272,10 +272,8 @@ class ModelToElasticaAutoTransformerTest extends \PHPUnit_Framework_TestCase
|
||||||
{
|
{
|
||||||
$transformer = $this->getTransformer();
|
$transformer = $this->getTransformer();
|
||||||
$document = $transformer->transform(new POPO(), array(
|
$document = $transformer->transform(new POPO(), array(
|
||||||
'upper' => array(
|
'_parent' => array('type' => 'upper', 'property'=>'upper', 'identifier' => 'id'),
|
||||||
'_parent' => array('type' => 'upper', 'identifier' => 'id'),
|
));
|
||||||
)
|
|
||||||
));
|
|
||||||
|
|
||||||
$this->assertEquals("parent", $document->getParent());
|
$this->assertEquals("parent", $document->getParent());
|
||||||
}
|
}
|
||||||
|
@ -284,10 +282,8 @@ class ModelToElasticaAutoTransformerTest extends \PHPUnit_Framework_TestCase
|
||||||
{
|
{
|
||||||
$transformer = $this->getTransformer();
|
$transformer = $this->getTransformer();
|
||||||
$document = $transformer->transform(new POPO(), array(
|
$document = $transformer->transform(new POPO(), array(
|
||||||
'upper' => array(
|
'_parent' => array('type' => 'upper', 'property'=>'upper', 'identifier' => 'name'),
|
||||||
'_parent' => array('type' => 'upper', 'identifier' => 'name'),
|
));
|
||||||
)
|
|
||||||
));
|
|
||||||
|
|
||||||
$this->assertEquals("a random name", $document->getParent());
|
$this->assertEquals("a random name", $document->getParent());
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,15 +62,13 @@ class ModelToElasticaAutoTransformer implements ModelToElasticaTransformerInterf
|
||||||
$document = new Document($identifier);
|
$document = new Document($identifier);
|
||||||
|
|
||||||
foreach ($fields as $key => $mapping) {
|
foreach ($fields as $key => $mapping) {
|
||||||
$value = $this->propertyAccessor->getValue($object, $key);
|
if ($key == '_parent') {
|
||||||
|
$value = $this->propertyAccessor->getValue($object, $mapping['property']);
|
||||||
if (isset($mapping['_parent']['identifier'])) {
|
$document->setParent($this->propertyAccessor->getValue($value, $mapping['identifier']));
|
||||||
/* $value is the parent. Read its identifier and set that as the
|
|
||||||
* document's parent.
|
|
||||||
*/
|
|
||||||
$document->setParent($this->propertyAccessor->getValue($value, $mapping['_parent']['identifier']));
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$value = $this->propertyAccessor->getValue($object, $key);
|
||||||
|
|
||||||
if (isset($mapping['type']) && in_array($mapping['type'], array('nested', 'object'))) {
|
if (isset($mapping['type']) && in_array($mapping['type'], array('nested', 'object'))) {
|
||||||
/* $value is a nested document or object. Transform $value into
|
/* $value is a nested document or object. Transform $value into
|
||||||
|
|
Loading…
Reference in a new issue