Problema relacion one to one

46 views
Skip to first unread message

Sergio de Candelario

unread,
Apr 10, 2013, 9:40:25 AM4/10/13
to symfony_...@googlegroups.com
el caso es que ahora estoy con una de oneToOne, que me conviene tener así, por que son dos tablas diferenciadas y una se utilizará para otras cosas, por lo que no me interesa tenerlo todo aglomerado, tengo dos clases diferenciadas:

Propietario:

/**

* @ORM\OneToOne(targetEntity="IngresosMensuales")

*/

private $ingresosMensuales;

ingresosMensuales:

/**

* @ORM\OneToOne(targetEntity="Propietario", inversedBy="ingresosMensuales")

* @ORM\JoinColumn(name="propietario_id", referencedColumnName="id")

*/

private $propietario;


realmente no se que puede estar mal, por que los campos en la base de datos estás correctos. Y he revisado una y otra vez las relaciones, pero realmente no le acabo de ver el fallo. 

Arnau González

unread,
Apr 10, 2013, 10:03:15 AM4/10/13
to symfony_...@googlegroups.com
Hola Sergio,

¿Puedes dar mas detalles del problema que tienes? No acaba de quedar claro con tu explicación.

Revisa la documentación de Doctrine al respecto,
así a primera vista veo que te falta el campo mappedBy en la clase Propietario, aunque no estoy seguro si es imprescindible o no.


2013/4/10 Sergio de Candelario <hade...@gmail.com>

--
Has recibido este mensaje porque estás suscrito al grupo "Symfony_barcelona" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a symfony_barcel...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 



--

Arnau

Sergio de Candelario

unread,
Apr 11, 2013, 4:43:14 AM4/11/13
to symfony_...@googlegroups.com
Si perdón. El tema es que tengo una relación oneToOne y al querer mostrar en Twig los campos relacionados me esta dando fallo:

Tengo una clase Propietario
Otra que se llama IngresosMensuales

Y en Twig, cuando accedo a un propietario, quiero acceder a sus ingresos mensuales, de esta forma:

<td>{{propietario.ingresosMensuales}}</td>

 
Pero me sale el siguiente error:

Method "ingresosMensuales" for object "Main\WebBundle\Entity\Propietario" does not exist in MainWebBundle:Admin:ingresos.html.twig at line 33


He estado mirando y remirando pero realmente no he encontrado donde puede estar el fallo. Seguramente sea una tonteria.

Jordi Casadevall

unread,
Apr 11, 2013, 5:26:58 AM4/11/13
to symfony_...@googlegroups.com
Hola Sergio,

el problema es que no tienes la función getter para el atributo "ingresosMensuales".  Twig añade automaticamente el string "get", pero tira del método getter i no del atributo. Fíjate que te dice "Method does not exist".

Saludos,

Jordi

Al 11/04/13 10:43, En/na Sergio de Candelario ha escrit:

Sergio de Candelario

unread,
Apr 11, 2013, 5:31:49 AM4/11/13
to symfony_...@googlegroups.com
Vale, me lo figuraba, entonces para que desde el propietario peuda acceder a las propiedades de ingresosMensuales, he de hacer un getIngresosMensuales en ingresosMensuales?

Jordi Casadevall

unread,
Apr 11, 2013, 5:33:55 AM4/11/13
to symfony_...@googlegroups.com
Sí, porqué la traducción de  {{ propietario.ingresosMensuales }}  en PHP, es: $propietario->getIngresosMensuales()

Saludos,

Jordi

Al 11/04/13 11:31, En/na Sergio de Candelario ha escrit:

Sergio de Candelario

unread,
Apr 11, 2013, 5:38:49 AM4/11/13
to symfony_...@googlegroups.com
Entonces para coger los campos de ingresosMensuales desde propietario como sería? ya que es una relación oneToOne

Jordi Casadevall

unread,
Apr 11, 2013, 5:42:01 AM4/11/13
to symfony_...@googlegroups.com
{{ propietario.ingresosMensuales.campoN }}    Siempre que exista el método getter   "getCampoN()"  en la classe ingresosMensuales.

Saludos,

Jordi

Al 11/04/13 11:38, En/na Sergio de Candelario ha escrit:

Sergio de Candelario

unread,
Apr 11, 2013, 5:46:57 AM4/11/13
to symfony_...@googlegroups.com
Pero acabo de poner esto:

<td>{{propietario.IngresosMensuales.Mes1}}</td>

y me sigue saliendo el mismo error? eso significa que también he de especificar un getIngresosMensuales?

Jordi Casadevall

unread,
Apr 11, 2013, 5:48:20 AM4/11/13
to symfony_...@googlegroups.com
Sí, porqué la traducción a PHP es:  $propietario->getIngresosMensuales()->getMes1()

Saludos,

Jordi


Al 11/04/13 11:46, En/na Sergio de Candelario ha escrit:

Sergio de Candelario

unread,
Apr 11, 2013, 6:09:29 AM4/11/13
to symfony_...@googlegroups.com
Vale, ya he generado los getters y setters para ingresos mensuales, pero ahora al intentar acceder a Mes1, que ya tiene su getter y setter como se peude ver en el código me sale esto:

Item "getMes1" for "" does not exist in MainWebBundle:Admin:ingresos.html.twig at line 33


Es como si no reconociese el ingresosMensuales como tal, realmente no se que puedo estar haciendo mal. 

Jordi Casadevall

unread,
Apr 11, 2013, 6:14:01 AM4/11/13
to symfony_...@googlegroups.com
Tendrás que estudiar bien en la documentación todo el tema de las relaciones en doctrine. Ahora parece que no tienes ninguna instancia asignada en el atributo "ingresosMensuales". Twig te está diciendo que estás pididiendo "getMes1" a un objecto NULL.

Saludos,

Jordi

Al 11/04/13 12:09, En/na Sergio de Candelario ha escrit:

Sergio de Candelario

unread,
Apr 11, 2013, 6:19:02 AM4/11/13
to symfony_...@googlegroups.com
Si, casi que será lo mejor, ya que me estoy dando cuenta de que el tema de relaciones me cuesta un poco todavía.

theUniC

unread,
Apr 11, 2013, 6:19:15 AM4/11/13
to symfony_...@googlegroups.com
Hola Sergio,

Probablemente te podríamos echar una mano si postearas el código completo de las entidades/twigs aquí o a través de algún gist. Solo haciendo una descripción del problema y pegando los errores es difícil poder dar una orientación acertada a tu problema.

Un saludo!
Christian.

Ricard Clau

unread,
Apr 11, 2013, 6:32:27 AM4/11/13
to symfony_...@googlegroups.com
Otra cosa que te puede ayudar es usar la función dump de Twig para ver qué le está llegando realmente a la vista (http://twig.sensiolabs.org/doc/functions/dump.html)

Pero estoy con Christian, si no copias tu código completo no podemos adivinar qué puede estar pasando a través de los errores

Sergio de Candelario

unread,
Apr 11, 2013, 6:34:02 AM4/11/13
to symfony_...@googlegroups.com
En el segundo comentario he pegado las clases de Propietario e IngresosMensuales, pero si quieres las vuelvo a pegar ahora a continuación
IngresosMensuales

Sergio de Candelario

unread,
Apr 11, 2013, 6:35:03 AM4/11/13
to symfony_...@googlegroups.com

Ricard Clau

unread,
Apr 11, 2013, 6:55:15 AM4/11/13
to symfony_...@googlegroups.com
Mirando así rápido diría que en Twig deberías hacer

propietario.ingresosMensuales.mes1

y no

propietario.IngresosMensuales.getMes1

El día 11 de abril de 2013 11:35, Sergio de Candelario
<hade...@gmail.com> escribió:

Sergio de Candelario

unread,
Apr 11, 2013, 6:58:13 AM4/11/13
to symfony_...@googlegroups.com
No se, estoy leyendo la documentación de Doctrine donde explica todo el tema de relaciones one--to-one pero me estoy liando mucho, por que en el mappedBy e inversedBy no se si va el nombre de la tabla o de la entidad.

Albert Casademont Filella

unread,
Apr 11, 2013, 7:17:18 AM4/11/13
to symfony_...@googlegroups.com
Ricard, en Twig da igual si haces IngresosMensuales o ingresosMensuales o ingresosmensuales, al final le pasa un strtolower


2013/4/11 Sergio de Candelario <hade...@gmail.com>

Salvador Zapata

unread,
Apr 11, 2013, 7:19:49 AM4/11/13
to symfony_...@googlegroups.com
Creo que el apunte de Ricard va mas por el mes1 en lugar del getMes1 que por el lowercase.


--
Salvador Zapata Armadans


2013/4/11 Albert Casademont Filella <albertca...@gmail.com>

Albert Casademont Filella

unread,
Apr 11, 2013, 7:21:51 AM4/11/13
to symfony_...@googlegroups.com
También da igual, si pones "mes1" buscará en este orden "mes1", "getMes1", "isMes1" y el magic method "__call"


2013/4/11 Salvador Zapata <salvado...@gmail.com>

Sergio de Candelario

unread,
Apr 11, 2013, 7:24:22 AM4/11/13
to symfony_...@googlegroups.com
Okey, gracias por las aclaraciones. Llevo poco en symfony 2 y aún hay algunas cosas que se me escapan, pero al final creo que me estoy apañanado mas o menos bien. Aún que todavía no consigo la relación que quiero.

Albert Casademont Filella

unread,
Apr 11, 2013, 7:26:23 AM4/11/13
to symfony_...@googlegroups.com
Pero el problema de Sergio viene claramente por lo que apunta Jordi, Propietario no tiene ninguna instancia de IngresosMensuales, el objeto no se crea solo! Lo que deberías hacer es mirar primero si el objecto IngresosMensuales no es nulo, y si no lo es, entonces acceder a sus propiedades:

<td>{{propietario.IngresosMensuales ? propietario.IngresosMensuales.Mes1}}</td>

Por ejemplo.

Sergio de Candelario

unread,
Apr 11, 2013, 7:32:17 AM4/11/13
to symfony_...@googlegroups.com
Si, eso estaba mirando de hacer ahora, es raro por que con Comunidades y Propietarios me va bien la relación, a partir de ahíe stoy mirando como inicializar ingresos mensuales.

Sergio de Candelario

unread,
Apr 11, 2013, 7:41:08 AM4/11/13
to symfony_...@googlegroups.com
Ya esta! El fallo lo estaba teniendo yo, ya que al ser una relación 1 a 1, tenía 2 registros sin registro asignado, por lo tanto no podía obtener ningún dato y por tanto encontraba el objeto a nulo! Por lo que será mejor que al crear el usuario también genere un nuevo registro en ingresosMensuales! Mil gracias a todos :)
Reply all
Reply to author
Forward
0 new messages