我正在开发一个使用FOS Elastica Bundle的现有Symfony项目,尤其是TransformEvent。
elastica.yml
types:
object:
mappings: ~
persistence:
identifier: id
driver: orm
model: Bundle\Entity\Object
listener: ~
provider: ~
finder: ~
听者
public function addCustomProperties(TransformEvent $event)
{
$document = $event->getDocument();
$object = $event->getObject();
/* elements */
$elementsList = $object->getElements();
$elements = [];
foreach($elementsList as $element)
{
$elements[] = array(
'id' => $element->getId(),
'value' => $element->getValue(),
'type' => $element->getType()
}
$document->set( 'elements', $elements );
}
public static function getSubscribedEvents() {
return array(
TransformEvent::POST_TRANSFORM => 'addCustomProperties'
);
}
我想将'elements'索引为嵌套,就像解释here一样,但我无法弄清楚如何做到这一点。我试图改变elastica.yml中的映射而没有成功。 例如,这会返回错误:
types:
object:
mappings:
elements:
type: nested
etc.
=> Bundle \ Entity \ Element类的对象无法转换为字符串
所以,我想知道是否可以在$ document-> set('elements',$ elements)中将'elements'类型定义为'nested'; ?
感谢您提供任何帮助!
答案 0 :(得分:0)
字段"元素" (我希望设置为"嵌套")并不存在于"模型" (束\实体\对象)。但是,必须如此,因为我使用此模型进行映射。
TransformEvent允许向映射添加自定义字段,但在这种情况下,它们的类型会自动设置。
我只需要在模型中放置一个新属性(没有注释,因为我不希望该属性在数据库中)
Bundle \ Entity \ Object
/** some properties **/
private $elements;
/**
* Constructor stuff
**/
/**
* Set elements
*/
public function getElements()
{
return $this->elements;
}
elastica.yml
types:
object:
mappings:
elements:
type: nested
# etc.
我不知道这是否适合使用TransformEvent,但它对我有用。