Hacer nullable=true una relacion ManyToOne

632 views
Skip to first unread message

Nicolas Menna

unread,
Jun 2, 2015, 11:00:32 AM6/2/15
to symfo...@googlegroups.com
Buen día amigos:
Tengo un problema en una relación entre dos entidades. Una de las entidades es "Trabajo" y la otra "Usuario".
"Trabajo" tiene un atributo que se llama "usuarioAsingadoId"

La idea seria que cuando se de alta un trabajo, se le pueda asignar un usuario al momento de la alta o no. El tema es que no me deja la opción de dejar en blanco el selector de usuarios.
Muy agradecido si alguien sabe como se puede llagar a solucionar este tema.


Esta es la clase "Trabajo":

    /**
     *
     * @ORM\ManyToOne(targetEntity="Usuario")
     */
    private $usuarioAsignadoId;


    /**
     * Set usuarioAsignadoId
     *
     * @param integer $usuarioAsignadoId
     * @return Trabajo
     */
    public function setUsuarioAsignadoId($usuarioAsignadoId)
    {
        $this->usuarioAsignadoId = $usuarioAsignadoId;

        return $this;
    }

    /**
     * Get usuarioAsignadoId
     *
     * @return integer 
     */
    public function getUsuarioAsignadoId()
    {
        return $this->usuarioAsignadoId;
    }


Este es mi Form

->add('usuarioAsignadoId','entity',array( 'class'=>'NM10joblogBundle:Usuario',
                                            'property'=>'username', 'empty_value'=>'Selecione un usuario',
                                            'attr'=>array('required'=>false,'class'=>"chzn-select"),
                                            'label'=>'Usuario asignado:') )



Muchas gracias por su tiempo.
Saludos,



Daniel Morfa Vega

unread,
Jun 2, 2015, 11:22:50 AM6/2/15
to symfo...@googlegroups.com
Si no me equivoco pues no tengo ningun codigo a mano ahora mismo era asi


    /**
     *
     * @ORM\ManyToOne(targetEntity="Usuario" nullable=true)
     */
    private $usuarioAsignadoId;

Nicolas Menna

unread,
Jun 2, 2015, 11:28:13 AM6/2/15
to symfo...@googlegroups.com
Hola Daniel, intente hacerlo de esa forma, pero cuando hago: php app\cosnsole doctrine:schema:update --force
Me da el siguiente error:

Imágenes integradas 1

Saludos.

--
--
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 a un tema del grupo "symfony-es" de Grupos de Google.
Para anular la suscripción a este tema, visita https://groups.google.com/d/topic/symfony-es/O3GAVcB3Msk/unsubscribe.
Para anular la suscripción a este grupo y a todos sus temas, envía un correo electrónico a symfony-es+...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
Nicolas I. Menna
 

Nicolas Menna

unread,
Jun 2, 2015, 11:29:21 AM6/2/15
to symfo...@googlegroups.com
Hola Daniel, intente hacerlo de esa forma, pero cuando hago: php app\cosnsole doctrine:schema:update --force
Me da el siguiente error:

Imágenes integradas 1


Saludos.


Alvaro Touzon

unread,
Jun 2, 2015, 11:30:08 AM6/2/15
to symfo...@googlegroups.com
Hola,
Creo si no me equivoco que la propiedad que buscas asociar no es nullable, sino:
- persist
- remove
 yo lo piongo en el mismo sitio pero asi
, cascade={"persist", "remove"}


Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a symfony-es+...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
Álvaro, Arquitect Software

Nicolas Menna

unread,
Jun 2, 2015, 11:36:55 AM6/2/15
to symfo...@googlegroups.com
Hola kassel

Una consulta: Pero esto no es para cuando hago una baja o modificación se aplique en las dos tablas?, yo lo que estoy necesitando es que el campo pueda quedar nulo.

Saludos.

Alvaro Touzon

unread,
Jun 2, 2015, 11:39:39 AM6/2/15
to symfo...@googlegroups.com
Si, es lo mismo que pides, pero es que ese campo tiene propiedades especificas por ser un puente entre dos tablas. Lo que conlleva que asuma las dos propiedades que indico, y entonces el resultado es q puede ser nulo.

Nicolas Menna

unread,
Jun 2, 2015, 11:46:27 AM6/2/15
to symfo...@googlegroups.com
Hola Alvaro, ahi lo puse como me han indicado
   
   /**
     *
     * @ORM\ManyToOne(targetEntity="Usuario", cascade={"persist", "remove"})
     */
    private $usuarioAsignadoId;


Pero al momento de dar el alta me dice q tengo q seleccionar algo...
Esta correctamente escrito el ORM? tal vez escribi algo mal...


Gracias.

Manuel Aguirre

unread,
Jun 2, 2015, 11:52:33 AM6/2/15
to symfo...@googlegroups.com

Buenas, en el form, el required colocalo en el nivel superior del arreglo y no dentro de attr.

Por otro lado no he visto cual es el error que te da el sistema en concreto:
* Validacion html5?
* validación del formulario en PHP?
* error de doctrine al hacer el persist?
* Algún otro error?

No se que versión de symfony usas, pero en las ultimas la opción empty_value ahora se llama placeholder.

Ya por ultimo te recomendaría que renombres el atributo usuarioAsignadoId por usuarioAsignado, ya que las relaciones son contra objetos (entidafes) y no contra ids.

Alvaro Touzon

unread,
Jun 2, 2015, 11:52:48 AM6/2/15
to symfo...@googlegroups.com
prueba asi
/**
     * @ORM\OneToMany(targetEntity="CortinasEntity", mappedBy="cortinas", cascade={"persist", "remove"})
     * @var ArrayCollection $cortina
     */
Te falta el mappedBy, que es la variable de la otra tabla que vincula a esta.

Alvaro Touzon

unread,
Jun 2, 2015, 11:53:51 AM6/2/15
to symfo...@googlegroups.com
Quizas te ayude esto
No olvides actualizar los comentarios a symfony
gracias!!
--
Álvaro, Arquitect Software

Daniel Morfa Vega

unread,
Jun 2, 2015, 12:10:09 PM6/2/15
to symfo...@googlegroups.com
​​
Creo que lo que estas buscando no se agrega en la relación sino en el campo así

@ORM\Column(name="nombre", type="string", length=30, nullable=true)

--
Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad. 
Albert Einstein

Alvaro Touzon

unread,
Jun 2, 2015, 12:12:39 PM6/2/15
to symfo...@googlegroups.com
Hola Daniel,
Si es sobre un campo, cierto es asi como se hace. 
Si es sobre un campo/relacion es como digo. 


Marcelo Strappini

unread,
Jun 3, 2015, 5:05:21 PM6/3/15
to symfo...@googlegroups.com
Nicolás, la opción 'required' va fuera de la opción 'attr'. Prueba con eso.

->add('usuarioAsignadoId', 'entity', array(
                         
'class' => 'NM10joblogBundle:Usuario',
                         
'property' => 'username',
                         
'empty_value' => 'Selecione un usuario',

                         
'required' => false,
                         
'attr'=>array(

                             
'class' => "chzn-select"
                         
),
                         
'label' => 'Usuario asignado:'

       
            ));



Qué versión usas de Symfony? porque a partir de 2.6 empty_value es reemplazado por placeholder.

Saludos.
Reply all
Reply to author
Forward
0 new messages