2017-09-11 5 views
1

Jusqu'à présent, j'utilisais l'annotation Groups pour sérialiser et remplir mon index de recherche Elastic, et cela marchait bien car il utilisait uniquement les champs du groupe "elastica", et uniquement pour les entités répertoriées dans mon fichier fos_elastica.yml. Je pouvais donc contrôler facilement quel champ était envoyé dans mon index et éviter les références circulaires. Le problème est maintenant que j'ai besoin de définir certaines relations comme "imbriquées" dans mon index, et je n'ai pas trouvé comment faire cela avec les annotations de groupes, j'ai donc décidé de configurer mes types dans mon fos_elastica.yml. ..Référence circulaire détectée lors de l'utilisation de fos: elastica: populate

Mais maintenant, le sérialiseur veut sérialisation champs que je fais (je ne pense pas ou du moins je suis ...) lui demande de ne pas

fos_elastica: 
serializer: ~ 
clients: 
    default: 
     url: '%elasticsearch.url%' 
     logger: true 
indexes: 
    alternance: 
     finder: ~ 
     use_alias: true 
     index_name: '%elastic_index_name%' 
     types: 
      offer: 
       mappings: 
        id: { type: integer } 
        name: ~ 
        slug: ~ 
        metaTitle: ~ 
        metaDescription: ~ 
        metaKeywords: ~ 
        content: ~ 
        duration: ~ 
        startat: ~ 
        keywords: ~ 
        email: ~ 
        wage: ~ 
        profile: ~ 
        premiumFlag: ~ 
        idValid: { type: integer } 
        updated: ~ 
        created: ~ 
        levels: 
         type: nested 
         properties: 
          id: { type: integer } 
          name: ~ 
          slug: ~ 
          metaTitle: ~ 
          metaDescription: ~ 
          metaKeywords: ~ 
          content: ~ 
        diplomas: 
         type: nested 
         properties: 
          id: { type: integer } 
          name: ~ 
          slug: ~ 
          metaTitle: ~ 
          metaDescription: ~ 
          metaKeywords: ~ 
          content: ~ 
        company: 
         type: nested 
         properties: 
          id: { type: integer } 
          name: ~ 
          slug: ~ 
          metaTitle: ~ 
          metaDescription: ~ 
          metaKeywords: ~ 
          content: ~ 
        domains: 
         type: nested 
         properties: 
          id: { type: integer } 
          name: ~ 
          slug: ~ 
          metaTitle: ~ 
          metaDescription: ~ 
          metaKeywords: ~ 
          content: ~ 
        contract: 
         type: nested 
         properties: 
          id: { type: integer } 
          name: ~ 
          slug: ~ 
          metaTitle: ~ 
          metaDescription: ~ 
          metaKeywords: ~ 
          content: ~ 
        city: 
         type: nested 
         properties: 
          id: { type: integer } 
          name: ~ 
          slug: ~ 
          metaTitle: ~ 
          metaDescription: ~ 
          metaKeywords: ~ 
          content: ~ 
          county: 
           type: nested 
           properties: 
            id: { type: integer } 
            name: ~ 
            slug: ~ 
            metaTitle: ~ 
            metaDescription: ~ 
            metaKeywords: ~ 
            content: ~ 
            region: 
             type: nested 
             properties: 
              id: { type: integer } 
              name: ~ 
              slug: ~ 
              metaTitle: ~ 
              metaDescription: ~ 
              metaKeywords: ~ 
              content: ~ 
       persistence: 
        driver: orm 
        model: ModelBundle\Entity\Offer 
        provider: ~ 

Quand je lance bin fos \ console : elastica: populate, j'obtiens cette erreur: Une référence circulaire a été détectée lors de la sérialisation de l'objet de la classe "Proxies__CG __ \ ModelBundle \ Entity \ County"

Donc, je suppose qu'il essaie de sérialiser County, et découvre qu'il existe une relation OneToMany "Cities", mais dans mon fichier de configuration je ne lui demande pas de sérialiser le champ "Cities" ?? Puis-je forcer le sérialiseur à ignorer/ne pas sérialiser les références circulaires? Tout ce que je peux trouver en ce qui concerne les références circulaires de manipulation est pas dans la configuration des classes d'entités/YML :(

Voici la configuration des entités:

// OFFRIR

/** 
    * @ORM\ManyToOne(targetEntity="City", inversedBy="offers") 
    * @ORM\JoinColumn(name="city_id", referencedColumnName="id", nullable=false) 
    */ 
    private $city; 

// VILLE

/** 
* @ORM\ManyToOne(targetEntity="ModelBundle\Entity\County", inversedBy="cities") 
* @ORM\JoinColumn(name="county_id", referencedColumnName="id", nullable=false) 
*/ 
private $county; 

/** 
* @ORM\OneToMany(targetEntity="ModelBundle\Entity\Offer", cascade={"remove"}, mappedBy="city", fetch="EAGER") 
* @ORM\JoinColumn(onDelete="CASCADE", nullable=true) 
*/ 
private $offers; 

// COUNT

Répondre

0

Apparemment, tout retrait de la correction du problème

serializer: ~ 

L.2: D