首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FOSElasticaBundle更新嵌套实体

FOSElasticaBundle更新嵌套实体
EN

Stack Overflow用户
提问于 2015-12-21 10:22:29
回答 1查看 990关注 0票数 0

为什么我有空的嵌套实体?我有索引天赋。在数据库人才有嵌套用户的情况下,当我现在更新或创建人才时,它不会在ElasticSearch中作为嵌套对象被更新,我不明白为什么?

代码语言:javascript
复制
fos_elastica:
clients:
    default:
      host: %elastica_host%
      port: %elastica_port%
      headers: { Authorization: Basic %elastica_auth_header% }

indexes:
    profile:
        finder: ~
        types:
             talent:
                mappings:
                    id:
                       type: integer
                    slug:
                       type: string
                    description:
                       type: string
                    user:
                        type: "nested"
                        properties:
                             id: ~
                             username:
                                type: string

我搜索并找到有关侦听器重写postPersistpostUpdatepreRemove的信息。

代码语言:javascript
复制
fos_elastica.listener.talent:
    class: Artel\SiteBundle\EventListener\ElasticaCourseListener
    arguments:
        - @fos_elastica.object_persister.user.user
        - ['postPersist', 'postUpdate', 'preRemove']
        - @fos_elastica.indexable
    calls:
        - [ setContainer, ['@service_container', @fos_elastica.object_persister.profile.talent ] ]
    tags:
        - { name: 'doctrine.event_subscriber' }

然后,我自己的侦听器Artel\SiteBundle\EventListener\ElasticaCourseListener如下所示:

代码语言:javascript
复制
<?php

    namespace Artel\SiteBundle\EventListener;

    use Doctrine\Common\EventArgs;
    use FOS\ElasticaBundle\Doctrine\Listener as BaseListener;
    use FOS\ElasticaBundle\Persister\ObjectPersister;
    use Symfony\Component\DependencyInjection\ContainerInterface;
    use Artel\ProfileBundle\Entity\Developer;

    class ElasticaCourseListener extends BaseListener
    {
        private $container;
        private $objectPersisterSession;

        public function setContainer(ContainerInterface $container, ObjectPersister $objectPersisterSession)
        {
            $this->container = $container;
            $this->objectPersisterSession = $objectPersisterSession;
        }

        public function postUpdate(EventArgs $args)
        {
            $entity = $args->getEntity();

            if ($entity instanceof Developer) {
                $this->scheduledForUpdate[] = $entity;
                foreach ($entity->getUser() as $session) {
                    $this->objectPersisterSession->replaceOne($session);
                }
            }
        }
    }

现在,我有错误

Symfony\Component\Debug\Exception\ContextErrorException 运行时注意: Artel\SiteBundle\EventListener\ElasticaCourseListener::postUpdate()声明应该与FOS\ElasticaBundle\Doctrine\Listener::postUpdate(Doctrine\Common\Persistence\Event\LifecycleEventArgs $eventArgs兼容)

请帮帮忙

EN

回答 1

Stack Overflow用户

发布于 2016-02-26 05:51:51

你必须用这个:

代码语言:javascript
复制
use Doctrine\Common\Persistence\Event\LifecycleEventArgs;

忘了那个吧:

代码语言:javascript
复制
use Doctrine\Common\EventArgs;

(该原则中有一些更新;)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34393410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档