2015-12-21 60 views
0

爲什麼我有空的嵌套實體?我有索引人才。在數據庫中,人才具有嵌套用戶,當現在,當我更新或創建人才時,它不會更新爲ElasticSearch中的嵌套對象,我不明白爲什麼?FOSElasticaBundle更新嵌套實體

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

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則是這樣的:

<?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 \持久性\事件\ LifecycleEventArgs $ EventArgs的)

請幫助

回答

0

您必須使用此:

use Doctrine\Common\Persistence\Event\LifecycleEventArgs; 

忘記那一個:

use Doctrine\Common\EventArgs; 

裏有一些學說更新;)