Hola a todos, tengo una duda con unas fixtures que comparten objetos,
Tengo una primera fixture que carga lo que son las "Áreas de Conocimiento" ( he cambiado un poco el código para simplificarlo, pero creo que la idea se mantiene )
$areasConocimientos = new AreasConocimientos();
$areasConocimientos->setAreaConocimiento('Diseño');
$manager->persist ($areasConocimientos);
$this->addReference( 'Diseño', $areasConocimientos);
$areasConocimientos = new AreasConocimientos();
$areasConocimientos->setAreaConocimiento('Programacion');
$manager->persist ($areasConocimientos);
$this->addReference( 'Programacion', $areasConocimientos);
$areasConocimientos = new AreasConocimientos();
$areasConocimientos->setAreaConocimiento('Otro');
$manager->persist ($areasConocimientos);
$this->addReference( 'Otro', $areasConocimientos);
//El objeto programa ProgramasEstudios tiene un Id, un campo string y una Relacion ManyToOne con AreasConocimientos
$objProgramasEstudios = new ProgramasEstudios();
$objProgramasEstudios->setProgramasEstudios( $programa );
$objProgramasEstudios->setAreaConocimiento( $manager->merge( $this->getReference($area) ) );
$manager->persist( $objProgramasEstudios );
}
}
$manager->flush();
Si ejecuto el comando para cargar las fixtures todo funciona sin problemas al haber usado $this->addReference()... luego puedo llamarla $this->getReference($area), el problema esta en que quiero usar los "programas de estudios" como referencia para otra fixture que necesito, así que agrego esta línea
$this->addReference( $programa, $objProgramasEstudios);// debajo de $manager->persist( $objProgramasEstudios );
Cuando hago esto y trato cargar las fixtures obtengo el siguiente error:
[BadMethodCallException]
Reference to: (Diseño ) already exists, use method setReference in order to override it
Supongo (es a la conclusión que he llegado) que al crear la referencia del $objProgramasEstudios, como este a su vez contiene un objeto de tipo AreasConocimiento trata de crear una referencia de la misma tambien, pero como ya existe una (cuando se crearon en el primer fixture) da un error, si uso el metodo setReference como lo indica obtengo otro error $objProgramasEstudios->setAreaConocimiento( $manager->merge( $this->getReference($area) ) ); indicando que no estoy pasando un objeto de tipo AreaConocimiento sino uno Proxies\EstudiosBundleEntityProgramasEstudiosProxy
> Hola a todos, tengo una duda con unas fixtures que comparten objetos,
> Tengo una primera fixture que carga lo que son las "Áreas de Conocimiento" > ( he cambiado un poco el código para simplificarlo, pero creo que la idea > se mantiene )
> //El objeto programa ProgramasEstudios tiene un Id, un > campo string y una Relacion ManyToOne con AreasConocimientos
> $objProgramasEstudios = new ProgramasEstudios();
> $objProgramasEstudios->setProgramasEstudios( $programa > );
> $objProgramasEstudios->setAreaConocimiento( > $manager->merge( $this->getReference($area) ) );
> $manager->persist( $objProgramasEstudios );
> }
> }
> $manager->flush();
> Si ejecuto el comando para cargar las fixtures todo funciona sin problemas > al haber usado $this->addReference()... luego puedo llamarla > $this->getReference($area), el problema esta en que quiero usar los > "programas de estudios" como referencia para otra fixture que > necesito, así que agrego esta línea
> $this->addReference( $programa, $objProgramasEstudios);// debajo > de $manager->persist( $objProgramasEstudios );
> Cuando hago esto y trato cargar las fixtures obtengo el siguiente error:
> [BadMethodCallException]
> Reference to: (Diseño ) already exists, use method setReference in order > to override it
> Supongo (es a la conclusión que he llegado) que al crear la referencia > del $objProgramasEstudios, como este a su vez contiene un objeto de tipo > AreasConocimiento trata de crear una referencia de la misma tambien, pero > como ya existe una (cuando se crearon en el primer fixture) da un error, si > uso el metodo setReference como lo indica obtengo otro error $objProgramasEstudios->setAreaConocimiento( > $manager->merge( $this->getReference($area) ) ); indicando que no estoy > pasando un objeto de tipo AreaConocimiento sino uno > Proxies\EstudiosBundleEntityProgramasEstudiosProxy
Estoy pasando tests a mi proyecto y si testeo un �nico Bundle perfecto, pero si testeo todo en general, parece que se "acumulan" los consumos de memoria.
Como el server de pruebas en cuesti�n tiene 512MB de RAM, al pasar el test "completo" me peta la m�quina.
==========================
xavi@bromo$ phpunit -c app/ src/FrontEnd/FeedbackBundle/
[...]
Time: *8 seconds, Memory: 103.00Mb*
OK (*3 tests, 27 assertions*)
xavi@bromo$
==========================
xavi@bromo$ phpunit -c app/ src/FrontEnd/
[...]
Time: *01:51, Memory: 508.75Mb*
OK (*24 tests, 420 assertions*)
---> Deber�a devolver el control al shell y se queda clavado por falta de memoria
==========================
�Alguien tiene alguna pista sobre c�mo optimizar los recursos durante el test o al menos "monitorizar" qui�n genera los leaks (si soy yo o es el phpunit)?
¿Tienes en cuenta el orden en que se cargan los fixtures? Me suena haber tenido problemas similares por no haberlo establecido. Ahora de memoria no recuerdo cómo se establecía el orden, no se si había un método getOrder() o era una annotation.
El viernes, 4 de mayo de 2012 22:09:15 UTC+2, Richard Perez escribió:
> El jueves, 3 de mayo de 2012 16:13:00 UTC-4:30, Richard Perez escribió:
>> Hola a todos, tengo una duda con unas fixtures que comparten objetos,
>> Tengo una primera fixture que carga lo que son las "Áreas de >> Conocimiento" ( he cambiado un poco el código para simplificarlo, pero creo >> que la idea se mantiene )
>> //El objeto programa ProgramasEstudios tiene un Id, >> un campo string y una Relacion ManyToOne con AreasConocimientos
>> $objProgramasEstudios = new ProgramasEstudios();
>> $objProgramasEstudios->setProgramasEstudios( >> $programa );
>> $objProgramasEstudios->setAreaConocimiento( >> $manager->merge( $this->getReference($area) ) );
>> $manager->persist( $objProgramasEstudios );
>> }
>> }
>> $manager->flush();
>> Si ejecuto el comando para cargar las fixtures todo funciona sin >> problemas al haber usado $this->addReference()... luego puedo llamarla >> $this->getReference($area), el problema esta en que quiero usar los >> "programas de estudios" como referencia para otra fixture que >> necesito, así que agrego esta línea
>> $this->addReference( $programa, $objProgramasEstudios);// debajo >> de $manager->persist( $objProgramasEstudios );
>> Cuando hago esto y trato cargar las fixtures obtengo el siguiente error:
>> [BadMethodCallException]
>> Reference to: (Diseño ) already exists, use method setReference >> in order to override it
>> Supongo (es a la conclusión que he llegado) que al crear la referencia >> del $objProgramasEstudios, como este a su vez contiene un objeto de tipo >> AreasConocimiento trata de crear una referencia de la misma tambien, pero >> como ya existe una (cuando se crearon en el primer fixture) da un error, si >> uso el metodo setReference como lo indica obtengo otro error $objProgramasEstudios->setAreaConocimiento( >> $manager->merge( $this->getReference($area) ) ); indicando que no estoy >> pasando un objeto de tipo AreaConocimiento sino uno >> Proxies\EstudiosBundleEntityProgramasEstudiosProxy
Si si tengo en cuenta el orden... de hecho ese es el método getOrder(), pero no se trata del orden. Mañana publico una forma mas sencilla de explicarlo a ver si alguien tiene una solucion :D.
El viernes, 4 de mayo de 2012 18:22:31 UTC-4:30, proclamo escribió:
> ¿Tienes en cuenta el orden en que se cargan los fixtures? Me suena haber > tenido problemas similares por no haberlo establecido. Ahora de memoria no > recuerdo cómo se establecía el orden, no se si había un método getOrder() o > era una annotation.
> El viernes, 4 de mayo de 2012 22:09:15 UTC+2, Richard Perez escribió:
>> Alguien que tenga una idea?
>> El jueves, 3 de mayo de 2012 16:13:00 UTC-4:30, Richard Perez escribió:
>>> Hola a todos, tengo una duda con unas fixtures que comparten objetos,
>>> Tengo una primera fixture que carga lo que son las "Áreas de >>> Conocimiento" ( he cambiado un poco el código para simplificarlo, pero creo >>> que la idea se mantiene )
>>> //El objeto programa ProgramasEstudios tiene un Id, >>> un campo string y una Relacion ManyToOne con AreasConocimientos
>>> $objProgramasEstudios = new ProgramasEstudios();
>>> $objProgramasEstudios->setProgramasEstudios( >>> $programa );
>>> $objProgramasEstudios->setAreaConocimiento( >>> $manager->merge( $this->getReference($area) ) );
>>> $manager->persist( $objProgramasEstudios );
>>> }
>>> }
>>> $manager->flush();
>>> Si ejecuto el comando para cargar las fixtures todo funciona sin >>> problemas al haber usado $this->addReference()... luego puedo llamarla >>> $this->getReference($area), el problema esta en que quiero usar los >>> "programas de estudios" como referencia para otra fixture que >>> necesito, así que agrego esta línea
>>> $this->addReference( $programa, $objProgramasEstudios);// debajo >>> de $manager->persist( $objProgramasEstudios );
>>> Cuando hago esto y trato cargar las fixtures obtengo el siguiente error:
>>> [BadMethodCallException]
>>> Reference to: (Diseño ) already exists, use method setReference >>> in order to override it
>>> Supongo (es a la conclusión que he llegado) que al crear la referencia >>> del $objProgramasEstudios, como este a su vez contiene un objeto de tipo >>> AreasConocimiento trata de crear una referencia de la misma tambien, pero >>> como ya existe una (cuando se crearon en el primer fixture) da un error, si >>> uso el metodo setReference como lo indica obtengo otro error $objProgramasEstudios->setAreaConocimiento( >>> $manager->merge( $this->getReference($area) ) ); indicando que no estoy >>> pasando un objeto de tipo AreaConocimiento sino uno >>> Proxies\EstudiosBundleEntityProgramasEstudiosProxy
> Hola a todos, tengo una duda con unas fixtures que comparten objetos,
> Tengo una primera fixture que carga lo que son las "Áreas de Conocimiento" (
> he cambiado un poco el código para simplificarlo, pero creo que la idea se
> mantiene )
> //El objeto programa ProgramasEstudios tiene un Id, un
> campo string y una Relacion ManyToOne con AreasConocimientos
> $objProgramasEstudios = new ProgramasEstudios();
> $objProgramasEstudios->setProgramasEstudios( $programa
> );
> $objProgramasEstudios->setAreaConocimiento(
> $manager->merge( $this->getReference($area) ) );
> $manager->persist( $objProgramasEstudios );
> }
> }
> $manager->flush();
> Si ejecuto el comando para cargar las fixtures todo funciona sin problemas
> al haber usado $this->addReference()... luego puedo
> llamarla $this->getReference($area), el problema esta en que quiero usar los
> "programas de estudios" como referencia para otra fixture que
> necesito, así que agrego esta línea
> $this->addReference( $programa, $objProgramasEstudios);// debajo
> de $manager->persist( $objProgramasEstudios );
> Cuando hago esto y trato cargar las fixtures obtengo el siguiente error:
> [BadMethodCallException]
> Reference to: (Diseño ) already exists, use method setReference in order
> to override it
> Supongo (es a la conclusión que he llegado) que al crear la referencia
> del $objProgramasEstudios, como este a su vez contiene un objeto de tipo
> AreasConocimiento trata de crear una referencia de la misma tambien, pero
> como ya existe una (cuando se crearon en el primer fixture) da un error, si
> uso el metodo setReference como lo indica obtengo otro
> error $objProgramasEstudios->setAreaConocimiento( $manager->merge(
> $this->getReference($area) ) ); indicando que no estoy pasando un objeto de
> tipo AreaConocimiento sino
> uno Proxies\EstudiosBundleEntityProgramasEstudiosProxy
> Alguien que me pueda ayudar :D
Lo raro es que el error dice "Diseño " en lugar de "Diseño 1" u otro.
Seguro que no es un error de tipeo en algún fixture?
Internamente setReference simplemente añade el objeto a un array con
la referencia como clave así que no creo que sea algún error de
referencia cruzada.
Saludos
-- Linux Registered User # 386081
A menudo unas pocas horas de "Prueba y error" podrán ahorrarte minutos
de leer manuales.
No, no es error de tipeo :S... A mi tambien me parecia raro que dijera
"Diseño" en lugar de "Diseño 1", por lo que llegue a esa conclusión que al
agregar el objeto "ProgramasEstudios" como este a su vez contiene un
objecto "AreaConocimiento" trata de agregar la referencia de este último
también, la cual si ya fue agregada... y quizás también por eso al user
setReference, lo cual sobreescribe una referencia entonces obtengo luego
error en setAreaconocimiento, pero todo esto lo asumo según lo que veo,
esperaba que alguien me dijera si era asi, si me equivocaba o si hay alguna
otra solución, en realidad se me ocurre una, pero no es muy elegante
entonces quiero escuchar opiniones
> 2012/5/3 Richard Perez <richar...@gmail.com>:
> > Hola a todos, tengo una duda con unas fixtures que comparten objetos,
> > Tengo una primera fixture que carga lo que son las "Áreas de
> Conocimiento" (
> > he cambiado un poco el código para simplificarlo, pero creo que la idea
> se
> > mantiene )
> > //El objeto programa ProgramasEstudios tiene un Id,
> un
> > campo string y una Relacion ManyToOne con AreasConocimientos
> > $objProgramasEstudios = new ProgramasEstudios();
> > $objProgramasEstudios->setProgramasEstudios(
> $programa
> > );
> > $objProgramasEstudios->setAreaConocimiento(
> > $manager->merge( $this->getReference($area) ) );
> > $manager->persist( $objProgramasEstudios );
> > }
> > }
> > $manager->flush();
> > Si ejecuto el comando para cargar las fixtures todo funciona sin
> problemas
> > al haber usado $this->addReference()... luego puedo
> > llamarla $this->getReference($area), el problema esta en que quiero usar
> los
> > "programas de estudios" como referencia para otra fixture que
> > necesito, así que agrego esta línea
> > Cuando hago esto y trato cargar las fixtures obtengo el siguiente error:
> > [BadMethodCallException]
> > Reference to: (Diseño ) already exists, use method setReference
> in order
> > to override it
> > Supongo (es a la conclusión que he llegado) que al crear la referencia
> > del $objProgramasEstudios, como este a su vez contiene un objeto de tipo
> > AreasConocimiento trata de crear una referencia de la misma tambien, pero
> > como ya existe una (cuando se crearon en el primer fixture) da un error,
> si
> > uso el metodo setReference como lo indica obtengo otro
> > error $objProgramasEstudios->setAreaConocimiento( $manager->merge(
> > $this->getReference($area) ) ); indicando que no estoy pasando un objeto
> de
> > tipo AreaConocimiento sino
> > uno Proxies\EstudiosBundleEntityProgramasEstudiosProxy
> > Alguien que me pueda ayudar :D
> Lo raro es que el error dice "Diseño " en lugar de "Diseño 1" u otro.
> Seguro que no es un error de tipeo en algún fixture?
> Internamente setReference simplemente añade el objeto a un array con
> la referencia como clave así que no creo que sea algún error de
> referencia cruzada.
> Saludos
> --
> Linux Registered User # 386081
> A menudo unas pocas horas de "Prueba y error" podrán ahorrarte minutos
> de leer manuales.
> --
> 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 symfony-es@googlegroups.com
> Para darte de baja, envía un email a
> symfony-es+unsubscribe@googlegroups.com
> El resto de opciones puedes encontrarlas en
> http://groups.google.com/group/symfony-es?hl=es
Disculpen Todos ya encontré el error y bueno lo que estaba asumiendo era
incorrecto, me parecía algo extraño, pero era lo único que se me ocurría,
como les dije trate de resumir el código para hacerlo más legible, pero ahi
fue donde estaba el problema que no vieron mi error real :p
El error estaba es que dentro de las areas de conocimiento (Diseño,
Programación, Otros) habían otras mas y no me había fijado que una de ellas
tenía también como programa de estudios 'Diseño', entonces tenia una Area
de Conocimiento y un programa de estudios que se llamaban igual.
Nuevamente Gracias a Todos
2012/5/7 Richard R. Perez Q. <richar...@gmail.com>
> No, no es error de tipeo :S... A mi tambien me parecia raro que dijera
> "Diseño" en lugar de "Diseño 1", por lo que llegue a esa conclusión que al
> agregar el objeto "ProgramasEstudios" como este a su vez contiene un
> objecto "AreaConocimiento" trata de agregar la referencia de este último
> también, la cual si ya fue agregada... y quizás también por eso al user
> setReference, lo cual sobreescribe una referencia entonces obtengo luego
> error en setAreaconocimiento, pero todo esto lo asumo según lo que veo,
> esperaba que alguien me dijera si era asi, si me equivocaba o si hay alguna
> otra solución, en realidad se me ocurre una, pero no es muy elegante
> entonces quiero escuchar opiniones
>> 2012/5/3 Richard Perez <richar...@gmail.com>:
>> > Hola a todos, tengo una duda con unas fixtures que comparten objetos,
>> > Tengo una primera fixture que carga lo que son las "Áreas de
>> Conocimiento" (
>> > he cambiado un poco el código para simplificarlo, pero creo que la idea
>> se
>> > mantiene )
>> > //El objeto programa ProgramasEstudios tiene un Id,
>> un
>> > campo string y una Relacion ManyToOne con AreasConocimientos
>> > $objProgramasEstudios = new ProgramasEstudios();
>> > $objProgramasEstudios->setProgramasEstudios(
>> $programa
>> > );
>> > $objProgramasEstudios->setAreaConocimiento(
>> > $manager->merge( $this->getReference($area) ) );
>> > $manager->persist( $objProgramasEstudios );
>> > }
>> > }
>> > $manager->flush();
>> > Si ejecuto el comando para cargar las fixtures todo funciona sin
>> problemas
>> > al haber usado $this->addReference()... luego puedo
>> > llamarla $this->getReference($area), el problema esta en que quiero
>> usar los
>> > "programas de estudios" como referencia para otra fixture que
>> > necesito, así que agrego esta línea
>> > Cuando hago esto y trato cargar las fixtures obtengo el siguiente error:
>> > [BadMethodCallException]
>> > Reference to: (Diseño ) already exists, use method setReference
>> in order
>> > to override it
>> > Supongo (es a la conclusión que he llegado) que al crear la referencia
>> > del $objProgramasEstudios, como este a su vez contiene un objeto de tipo
>> > AreasConocimiento trata de crear una referencia de la misma tambien,
>> pero
>> > como ya existe una (cuando se crearon en el primer fixture) da un
>> error, si
>> > uso el metodo setReference como lo indica obtengo otro
>> > error $objProgramasEstudios->setAreaConocimiento( $manager->merge(
>> > $this->getReference($area) ) ); indicando que no estoy pasando un
>> objeto de
>> > tipo AreaConocimiento sino
>> > uno Proxies\EstudiosBundleEntityProgramasEstudiosProxy
>> > Alguien que me pueda ayudar :D
>> Lo raro es que el error dice "Diseño " en lugar de "Diseño 1" u otro.
>> Seguro que no es un error de tipeo en algún fixture?
>> Internamente setReference simplemente añade el objeto a un array con
>> la referencia como clave así que no creo que sea algún error de
>> referencia cruzada.
>> Saludos
>> --
>> Linux Registered User # 386081
>> A menudo unas pocas horas de "Prueba y error" podrán ahorrarte minutos
>> de leer manuales.
>> --
>> 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 symfony-es@googlegroups.com
>> Para darte de baja, envía un email a
>> symfony-es+unsubscribe@googlegroups.com
>> El resto de opciones puedes encontrarlas en
>> http://groups.google.com/group/symfony-es?hl=es
areasDeConocomiento lo estas declarabdo 3 veces con el.mismo nombre tu
identificador debe ser diferente...
El 03/05/2012 16:13, "Richard Perez" <richar...@gmail.com> escribió:
> Hola a todos, tengo una duda con unas fixtures que comparten objetos,
> Tengo una primera fixture que carga lo que son las "Áreas de Conocimiento"
> ( he cambiado un poco el código para simplificarlo, pero creo que la idea
> se mantiene )
> //El objeto programa ProgramasEstudios tiene un Id, un
> campo string y una Relacion ManyToOne con AreasConocimientos
> $objProgramasEstudios = new ProgramasEstudios();
> $objProgramasEstudios->setProgramasEstudios( $programa
> );
> $objProgramasEstudios->setAreaConocimiento(
> $manager->merge( $this->getReference($area) ) );
> $manager->persist( $objProgramasEstudios );
> }
> }
> $manager->flush();
> Si ejecuto el comando para cargar las fixtures todo funciona sin problemas
> al haber usado $this->addReference()... luego puedo llamarla
> $this->getReference($area), el problema esta en que quiero usar los
> "programas de estudios" como referencia para otra fixture que
> necesito, así que agrego esta línea
> $this->addReference( $programa, $objProgramasEstudios);// debajo
> de $manager->persist( $objProgramasEstudios );
> Cuando hago esto y trato cargar las fixtures obtengo el siguiente error:
> [BadMethodCallException]
> Reference to: (Diseño ) already exists, use method setReference in order
> to override it
> Supongo (es a la conclusión que he llegado) que al crear la referencia
> del $objProgramasEstudios, como este a su vez contiene un objeto de tipo
> AreasConocimiento trata de crear una referencia de la misma tambien, pero
> como ya existe una (cuando se crearon en el primer fixture) da un error, si
> uso el metodo setReference como lo indica obtengo otro error $objProgramasEstudios->setAreaConocimiento(
> $manager->merge( $this->getReference($area) ) ); indicando que no estoy
> pasando un objeto de tipo AreaConocimiento sino uno
> Proxies\EstudiosBundleEntityProgramasEstudiosProxy
> Alguien que me pueda ayudar :D
> --
> 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 symfony-es@googlegroups.com
> Para darte de baja, envía un email a
> symfony-es+unsubscribe@googlegroups.com
> El resto de opciones puedes encontrarlas en
> http://groups.google.com/group/symfony-es?hl=es