Problema con Transacciones con Symfony 5

59 views
Skip to first unread message

Luis Vallejos

unread,
Aug 6, 2021, 5:17:47 AM8/6/21
to symfony-es
CONTEXTO:
Trato de armar una transacción para registrar una salida y su detalle, solo con venta funciona pero al momento de aumentar el Detalle esta deja de funcionar.

Tenia la idea de, usar 2 form separados, pero cada uno tendría su submit y me confundo.

MI FORMULARIO:
Este es mi formulario de Salida (cuando comento la parte que llama a detalle, funciona).
Screenshot_1.png

SE VE ASI:
Screenshot_2.png
MI TRANSACCION:
- No se si lo estoy haciendo de la manera correcta o hay otra mejor, pero cuando ignoro (ósea comento el form de Detalle, funciona).
Screenshot_3.png

MI ERROR:
Screenshot_4.png

GRACIAS DE ANTEMANO.

Eloy González Andueza

unread,
Aug 6, 2021, 6:03:49 AM8/6/21
to symfo...@googlegroups.com
Hola,
Creo que te falta el persist de detalle salida
Un saludo

--
--
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Google Groups.
Para publicar en este grupo, envía un email a symfo...@googlegroups.com
Para darte de baja, envía un email a symfony-es+...@googlegroups.com
El resto de opciones puedes encontrarlas en http://groups.google.com/group/symfony-es?hl=es

---
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a symfony-es+...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/symfony-es/87d8cea1-c81b-4f54-9658-ef5ec6b24350n%40googlegroups.com.

Eloy González Andueza

unread,
Aug 6, 2021, 6:06:38 AM8/6/21
to symfo...@googlegroups.com
Creo que a los elementos de detalle salida tampoco se acceden así.
¿Puedes poner en el profiler el formulario para ver cómo se envían los campos?
Un saludo

Carlos A Salazar

unread,
Aug 6, 2021, 6:25:58 AM8/6/21
to symfony-es
porque no haces un HangdleRequest del FORM
por ejmplo


  $form = $this->createForm(FormularioSalidaType::class, $entitySalida);
   $form->handleRequest($request);
 Y dejas que el FORM se encargue de todo lo demas..
y luego el persist de la entidad $entitySalida

asi se ejecuta todo correctamente..

No deberia pero si tienes 2 entidades enlazadas; la segunda de estarn linked con la primera por el Objeto no por el ID si teines las relaciones en las entidades  por objetos seria lo correcto
si las tienes Manualmente como se ve por ID entonces deberias Primero Persistir Salida hacer flush para que se grabe y obtener el ID sino el ID sera vacio no esta guardado..
por otro lado, e sposibl que tengas un addDetalle!!?? si el detalle o muchos detalles es un array puede que este alli el problema porque puede que sea un array conjutos de datos o al revez...
Depende como tengas las Entidades creadas he visto que la definicion de las relaciones de entidades son el foco del problemas Revisa eso!!
que relaciones tienes con tus entidades, recuerda que son relaciones de objetos y no de bases de datos son diferentes empieza por alli y kizas des con el problema..!!
Message has been deleted

Luis Vallejos

unread,
Aug 7, 2021, 11:55:42 PM8/7/21
to symfony-es

Buenas la idea es primero un solo detalle y luego pasarlo a varios, detalles, mi dudas son:

--------------------------------------[¿Mis entidad esta bien?] --------------------------------------

ENTIDAD SALIDA:
Screenshot_1.png

ENTIDAD DETALLE-SALIDA:
Screenshot_2.png

--------------------------------------[Tengo un type Detalle y lo llame dentro de Salida]--------------------------------------
Screenshot_3.png

--------------------------------------[Como llamo a los elementos de esa parte del formulario]--------------------------------------

De momento es un solo detalle, pero a futuro quiero que sea una lista de detalles, que luego pueda editar (agregar o quitar elementos), después de hacer el flush a Salida, debo hacer otro flush para detalle con la misma variable ($em) ?Screenshot_4.png

Message has been deleted

Luis Vallejos

unread,
Aug 8, 2021, 11:39:30 PM8/8/21
to symfony-es
En resumen, esto que quiero hacer lo hice en Laravel 5.4 (Salida y con varios detalles),y trato de replicarlo en Symfony, pero acá al tener un formulario dentro de otro, no se como manejar esa parte de los Arrays o si lo manejo de forma correcta.

ASI ERA EN LARAVEL:Screenshot_1.png

Saúl Hernández Arellano

unread,
Nov 19, 2021, 1:04:08 PM11/19/21
to symfony-es

No entiendo bien tu duda

 En tu entidad Salida tienes una relación “OneToMany” a “DetalleSalida”, lo que implica que tienes muchos detalles por cada salida, por la cual tu propiedad “detallessalida” es un “ArrayCollection”.

 En tu formulario necesitas un ArrayCollectionType

  ->add('detallessalida', CollectionType::class, [

                'entry_type' => DetalleSalidaType::class,

                'label' => false,                 // Quita le etiqueta global de la colección 

                'by_reference' => false,   // Es necesario para que funcione bien 

                'allow_add' => true,         //  Desde el formulario puedes agregar nuevos DetalleSalida

                'allow_delete' => true,      // Desde el formulario puedes borrar los DetalleSalida

                'prototype' => true,           // Se requiere un prototipo para generar nuevos "Formularios embebidos" del tipo DetalleSalidaType  en la vista

            ])

 Y en tu controlador

 

  /**

     * @Route("/new", name="candidato_new", methods={"GET","POST"})

     */

    public function new(Request $request): Response

    {

        $salida= new Salida();

        $form = $this->createForm(SalidaType::class, $salida);

        $form->handleRequest($request);

         if ($form->isSubmitted() && $form->isValid()) {

            $entityManager = $this->getDoctrine()->getManager();

            $entityManager->persist($salida);

            $entityManager->flush();

            return $this->redirectToRoute('salida_show', ['id' => $salida->getId()], Response::HTTP_SEE_OTHER);

        }

        return $this->renderForm(salida/new.html.twig', [

            salida => $salida,

            'form' => $form,

        ]);

    }

En el twig  vas a tener que crear los scripts en JavaScript, necesarios para agregar los "DetalleSalida"  que necesites

Te dejo un link para que puedas ampliar esta información    https://symfony.com/doc/current/reference/forms/types/collection.html


Saludos

Reply all
Reply to author
Forward
0 new messages