J'ai une entité qui se rapporte à elle-même. L'entité a des champs: parent et enfants.doctrine symfony2 - Ajouter des enfants à une entité auto-apparentée
class A
{
// ...
/**
* @var A
* @ORM\ManyToOne(targetEntity="A", inversedBy="children")
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id", nullable=true, onDelete="CASCADE")
*/
protected $parent;
/**
* @var A[]
* @ORM\OneToMany(targetEntity="A", mappedBy="parent", cascade={"all"}, orphanRemoval=true)
*/
protected $children;
}
Je souhaite ajouter des enfants à cette entité en configurant des enfants sous forme. Ce type d'entité ressemble à ceci:
class AType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
// ...
->add('children', 'collection', [
'type' => new AType(),
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
'prototype' => true,
])
;
}
}
Lorsque j'envoie des données comme ceci:
'a' => [
[
'name' => 'main a',
'children' => [
[
'name' => 'child a 1',
],
[
'name' => 'child a 2',
],
],
],
],
(en test, je n'ai pas vue, car cette application est basée sur la communication complète REST Api) Je eu cette erreur:
PHP Fatal error: Maximum function nesting level of '100' reached, aborting!
Alors, est-il même possible d'ajouter des enfants à des entités liées autonomes?
Cela fonctionnerait si j'avais 2 entités: l'entité A avec les enfants du champ liés à l'entité B. Mais, peut-il fonctionner avec cette relation?
Devrais-je changer de type dans la classe AType de new AType()
à quelque chose de différent.
EDIT: En fait, je veux juste obtenir des données et les valider. Je n'ai pas besoin de formulaire HTML pour l'afficher. Je peux le faire comme ceci:
// controller
$jms = $this->get('jms_serializer');
$entity = $jms->deserialize($request->getContent(), 'AcmeBundle\Entity\A', 'json');
$this->em->persist($entity);
$this->em->flush();
sans utiliser de formulaire dans le contrôleur. Mais dans ce cas, mes données ne seront pas validées.
Essayez-vous de sérialiser votre entité à un moment donné? L'auto-référence peut en être la cause et vous devez implémenter vos propres règles de sérialisation. – stevenll
Non. J'essaie juste d'ajouter ceci et c'est tout. Mon action dans le contrôleur semble totalement normale et renvoie une réponse vide. –
Essayez d'augmenter la valeur xdebug (http: // stackoverflow.com/questions/4293775/augmentant-imbriquant-fonctions-appelle-limite/4293870 # 4293870): 'xdebug.max_nesting_level = 200'. Cela devrait vous donner la vraie erreur. –