Ho un'entità che si riferisce a se stessa. L'entità ha campi: genitore e bambini.symfony2 doctrine - Aggiunta di bambini a entità auto-correlate
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;
}
voglio aggiungere i bambini a questa entità attraverso la creazione di bambini in forma. Questo tipo di entità simile a questa:
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,
])
;
}
}
Quando invio dei dati in questo modo:
'a' => [
[
'name' => 'main a',
'children' => [
[
'name' => 'child a 1',
],
[
'name' => 'child a 2',
],
],
],
],
(in prova, non ho vista, perché questa applicazione si basa sulla piena comunicazione API REST) ho ottenuto questo errore:
PHP Fatal error: Maximum function nesting level of '100' reached, aborting!
Quindi, è anche possibile aggiungere i bambini a soggetti autonomi connessi?
Funzionerebbe se ho 2 entità: entità A con campi figli relativi all'entità B. Ma, può funzionare con questa relazione?
Devo cambiare tipo in AType classe da new AType()
a qualcosa di diverso.
MODIFICA: In realtà voglio solo ottenere i dati e convalidarli. Non ho bisogno del modulo HTML per visualizzarlo. Posso farlo in questo modo:
// controller
$jms = $this->get('jms_serializer');
$entity = $jms->deserialize($request->getContent(), 'AcmeBundle\Entity\A', 'json');
$this->em->persist($entity);
$this->em->flush();
senza utilizzare Modulo nel controller. Ma in questo caso i miei dati non saranno convalidati.
Stai provando a serializzare la tua entità ad un certo punto? L'auto referenza può causarlo e devi implementare le tue regole di serializzazione. – stevenll
No. Cerco solo di aggiungere questo e basta. La mia azione nel controller sembra totalmente normale e restituisce una risposta vuota. –
Provare a [aumentare il valore xdebug] (http: // stackoverflow.it/questions/4293775/crescente-nesting-functions-calls-limit/4293870 # 4293870): 'xdebug.max_nesting_level = 200'. Dovrebbe darti il vero errore. –