Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Relación en la misma tabla Symfony

11 de marzo de 2016

Hola, estoy probando este ejemplo de una relación en la misma tabla

/**
     * @ORM\OneToMany(targetEntity="Payment", mappedBy="parent")
     */
    public $child;
 
    /**
     * @ORM\ManyToOne(targetEntity="Payment", inversedBy="child")
     * @ORM\JoinColumn(name="parent_id", referencedColumnName="id")
     */
    public $parent;

y agrego esto en el constructor:

/**
     * Constructor
     */
    public function __construct() {
        $this->child = new ArrayCollection();
    }

Genero el formulario:

$form = $this->createFormBuilder($plans)
                ->add('name', TextType::class, array('label' => 'Nombre'))
                ->add('recargo', TextType::class, array('label' => 'Recargo','required' => false,))
                ->add('descuento', TextType::class, array('label' => 'Descuento','required' => false,))
                ->add('multiple', CheckboxType::class, array('label' => 'Multiple','required' => false,))
                ->add('child', EntityType::class, array('class' => 'AppBundle:Payment','label' => 'Padre','multiple' => false,))
                ->add('save', SubmitType::class, array('label' => 'Guardar'))
                ->add('saveAndAdd', SubmitType::class, array('label' => 'Guardar y Agregar uno Nuevo'))
                ->getForm();

Muestra todos los campos bien y el combo para seleccionar a su padre, pero al intentar agregar o guardar alguna modificación sale este error

Catchable Fatal Error: Argument 1 passed to Doctrine\Common\Collections\ArrayCollection::__construct()
must be of the type array, object given, called in
/home/se/D/mn/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php on line 605 and defined

¿Alguna idea?

Saludos


Respuestas

#1

¡Ups! Me auto-respondo: tenía armado el formulario mal; puse child y en su lugar iba parent. Saludos.

$form = $this->createFormBuilder($plans)
    ->add('name', TextType::class, array('label' => 'Nombre'))
    ->add('recargo', TextType::class, array('label' => 'Recargo','required' => false,))
    ->add('descuento', TextType::class, array('label' => 'Descuento','required' => false,))
    ->add('multiple', CheckboxType::class, array('label' => 'Multiple','required' => false,))
    ->add('parent', EntityType::class, array('class' => 'AppBundle:Payment','label' => 'Padre','multiple' => false,))
    ->add('save', SubmitType::class, array('label' => 'Guardar'))
    ->add('saveAndAdd', SubmitType::class, array('label' => 'Guardar y Agregar uno Nuevo'))
    ->getForm();

@xub

11 marzo 2016, 17:35
#2

Estas cosas pasan a veces ;)

@javiereguiluz

11 marzo 2016, 17:37