Foros del Web » Programando para Internet » PHP » Symfony »

Formulario para insertar datos en entidades con relacion M:N

Estas en el tema de Formulario para insertar datos en entidades con relacion M:N en el foro de Symfony en Foros del Web. Buenas antes de nada gracias a este estupendo foro que hace que cada día seamos un poco más sabios. Bueno al lio explico el problema ...
  #1 (permalink)  
Antiguo 28/10/2014, 18:02
 
Fecha de Ingreso: agosto-2013
Ubicación: Oyón/Alava
Mensajes: 23
Antigüedad: 10 años, 8 meses
Puntos: 0
Formulario para insertar datos en entidades con relacion M:N

Buenas antes de nada gracias a este estupendo foro que hace que cada día seamos un poco más sabios.


Bueno al lio explico el problema que tengo.

Estoy haciendo una tienda online y esto la creación de productos.

Dichos productos tienen una relacion N:M con la entidad categoria.

Lo que no encuentro es como poder crear los productos viendo en un campo tipo entity las categorias asociadas que puedo elegir.

Las entidades que tengo son las siguientes.


Entidad categoria:
Código PHP:
<?php

namespace WolfrcProductosBundleEntity
;

use 
WolfrcTiendaBundleUtilUtil;
use 
DoctrineORMMapping as ORM;

/**
 * Categoria
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Wolfrc\ProductosBundle\Entity\CategoriaRepository")
 */
class Categoria
{
    
/**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\OneToMany(targetEntity="Wolfrc\ProductosBundle\Entity\Categoria", mappedBy="categoriaPadre", cascade="remove")
     */
    
private $id;

    
/**
     * @var string
     *
     * @ORM\Column(name="nombre", type="string", length=255)
     */
    
private $nombre;

    
/**
     * @var string
     *
     * @ORM\Column(name="slug", type="string", length=255)
     */
    
private $slug;

    
/**
     * @var string
     *
     * @ORM\Column(name="descripcion", type="string", length=255, nullable=true)
     */
    
private $descripcion;

    
/**
     *
     * @ORM\ManyToOne(targetEntity="Wolfrc\ProductosBundle\Entity\Categoria", inversedBy="id")
     * @ORM\JoinColumn(name="categoriaPadre_id", referencedColumnName="id", onDelete="SET NULL")
     */
    
private $categoriaPadre;
    
    
/**
     *
     * @ORM\ManyToMany(targetEntity="Wolfrc\ProductosBundle\Entity\Productos", inversedBy="categorias")
     */
    
private $productos;
    
    
    public function 
__construct() {
        
$this->id = new DoctrineCommonCollectionsArrayCollection();
        
$this->productos = new DoctrineCommonCollectionsArrayCollection();
    }

    public function 
__toString() {
        return 
$this->getNombre();
    }

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

    
/**
     * Set nombre
     *
     * @param string $nombre
     * @return Categoria
     */
    
public function setNombre($nombre)
    {
        
$this->nombre $nombre;
        
$this->setSlug(Util::generateSlug($nombre));

        return 
$this;
    }

    
/**
     * Get nombre
     *
     * @return string 
     */
    
public function getNombre()
    {
        return 
$this->nombre;
    }

    
/**
     * Set slig
     *
     * @param string $slig
     * @return Categoria
     */
    
public function setSlug($slug)
    {
        
$this->slug $slug;

        return 
$this;
    }

    
/**
     * Get slig
     *
     * @return string 
     */
    
public function getSlug()
    {
        return 
$this->slug;
    }

    
/**
     * Set descripcion
     *
     * @param string $descripcion
     * @return Categoria
     */
    
public function setDescripcion($descripcion)
    {
        
$this->descripcion $descripcion;

        return 
$this;
    }

    
/**
     * Get descripcion
     *
     * @return string 
     */
    
public function getDescripcion()
    {
        return 
$this->descripcion;
    }

    
/**
     * Add categoriaPadre
     *
     * @param \Wolfrc\ProductosBundle\Entity\Categoria $categoriaPadre
     * @return Categoria
     */
    
public function addCategoriaPadre(WolfrcProductosBundleEntityCategoria $categoriaPadre)
    {
        
$this->categoriaPadre[] = $categoriaPadre;

        return 
$this;
    }

    
/**
     * Remove categoriaPadre
     *
     * @param \Wolfrc\ProductosBundle\Entity\Categoria $categoriaPadre
     */
    
public function removeCategoriaPadre(WolfrcProductosBundleEntityCategoria $categoriaPadre)
    {
        
$this->categoriaPadre->removeElement($categoriaPadre);
    }

    
/**
     * Get categoriaPadre
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    
public function getCategoriaPadre()
    {
        return 
$this->categoriaPadre;
    }

    
/**
     * Add productos
     *
     * @param \Wolfrc\ProductosBundle\Entity\Productos $productos
     * @return Categoria
     */
    
public function addProducto(WolfrcProductosBundleEntityProductos $productos)
    {
        
$this->productos[] = $productos;

        return 
$this;
    }

    
/**
     * Remove productos
     *
     * @param \Wolfrc\ProductosBundle\Entity\Productos $productos
     */
    
public function removeProducto(WolfrcProductosBundleEntityProductos $productos)
    {
        
$this->productos->removeElement($productos);
    }

    
/**
     * Get productos
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    
public function getProductos()
    {
        return 
$this->productos;
    }

    
/**
     * Set categoriaPadre
     *
     * @param \Wolfrc\ProductosBundle\Entity\Categoria $categoriaPadre
     * @return Categoria
     */
    
public function setCategoriaPadre(WolfrcProductosBundleEntityCategoria $categoriaPadre null)
    {
        
$this->categoriaPadre $categoriaPadre;

        return 
$this;
    }
}
Gracias a todos los que me puedan hechar una mano.

Si tienen algun lugar donde poder ver estas dudas y me los pueden indicar me harian un gran favor gracias otra vez.
  #2 (permalink)  
Antiguo 28/10/2014, 18:05
 
Fecha de Ingreso: agosto-2013
Ubicación: Oyón/Alava
Mensajes: 23
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Formulario para insertar datos en entidades con relacion M:N

Pongo aqui otra entidad porque no me permite introducir más caracteres

Entidad producto:

Código PHP:
<?php

namespace WolfrcProductosBundleEntity
;

use 
DoctrineORMMapping as ORM;

/**
 * Productos
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Wolfrc\ProductosBundle\Entity\ProductosRepository")
 */
class Productos
{
    
/**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    
private $id;
  
    
    
/**
     *
     * @ORM\ManyToMany(targetEntity="Wolfrc\ProductosBundle\Entity\Categoria", mappedBy="productos")
     */
    
private $categorias;
    
    
/**
     *
     * @ORM\OneToMany(targetEntity="Wolfrc\OfertaBundle\Entity\Oferta", mappedBy="code")
     */
    
private $oferta;
    
    
    
/**
     * @ORM\ManyToMany(targetEntity="Wolfrc\OptionsBundle\Entity\Ficheros", mappedBy="producto")
     */
    
private $imagenes;
    
    
/**
     *
     * @ORM\OneToMany(targetEntity="Wolfrc\FacturasBundle\Entity\LineaFactura", mappedBy="idProducto")
     */
    
private $lineaFactura;
    
    
    
/**
     *
     * @ORM\OneToMany(targetEntity="Wolfrc\TiendaBundle\Entity\ArticulosPedidoProveedor", mappedBy="productoCode")
     */
    
private $producto;

    public function 
__construct() {
        
$this->categorias = new DoctrineCommonCollectionsArrayCollection();
        
$this->oferta = new DoctrineCommonCollectionsArrayCollection();
        
$this->imagenes = new DoctrineCommonCollectionsArrayCollection();
        
$this->lineaFactura = new DoctrineCommonCollectionsArrayCollection(); 
        
$this->producto = new DoctrineCommonCollectionsArrayCollection(); 
    }
    
    public function 
__toString() {
        return 
$this->getNombre();
    }


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

   
    
/**
     * Add categorias
     *
     * @param \Wolfrc\ProductosBundle\Entity\Categoria $categorias
     * @return Productos
     */
    
public function addCategoria(WolfrcProductosBundleEntityCategoria $categorias)
    {
        
$this->categorias[] = $categorias;

        return 
$this;
    }

    
/**
     * Remove categorias
     *
     * @param \Wolfrc\ProductosBundle\Entity\Categoria $categorias
     */
    
public function removeCategoria(WolfrcProductosBundleEntityCategoria $categorias)
    {
        
$this->categorias->removeElement($categorias);
    }

    
/**
     * Get categorias
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    
public function getCategorias()
    {
        return 
$this->categorias;
    }

    
/**
     * Add oferta
     *
     * @param \Wolfrc\OfertaBundle\Entity\Oferta $oferta
     * @return Productos
     */
    
public function addOfertum(WolfrcOfertaBundleEntityOferta $oferta)
    {
        
$this->oferta[] = $oferta;

        return 
$this;
    }

    
/**
     * Remove oferta
     *
     * @param \Wolfrc\OfertaBundle\Entity\Oferta $oferta
     */
    
public function removeOfertum(WolfrcOfertaBundleEntityOferta $oferta)
    {
        
$this->oferta->removeElement($oferta);
    }

    
/**
     * Get oferta
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    
public function getOferta()
    {
        return 
$this->oferta;
    }

    
/**
     * Add lineaFactura
     *
     * @param \Wolfrc\FacturasBundle\Entity\LineaFactura $lineaFactura
     * @return Productos
     */
    
public function addLineaFactura(WolfrcFacturasBundleEntityLineaFactura $lineaFactura)
    {
        
$this->lineaFactura[] = $lineaFactura;

        return 
$this;
    }

    
/**
     * Remove lineaFactura
     *
     * @param \Wolfrc\FacturasBundle\Entity\LineaFactura $lineaFactura
     */
    
public function removeLineaFactura(WolfrcFacturasBundleEntityLineaFactura $lineaFactura)
    {
        
$this->lineaFactura->removeElement($lineaFactura);
    }

    
/**
     * Get lineaFactura
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    
public function getLineaFactura()
    {
        return 
$this->lineaFactura;
    }

    
/**
     * Add producto
     *
     * @param \Wolfrc\TiendaBundle\Entity\ArticulosPedidoProveedor $producto
     * @return Productos
     */
    
public function addProducto(WolfrcTiendaBundleEntityArticulosPedidoProveedor $producto)
    {
        
$this->producto[] = $producto;

        return 
$this;
    }

    
/**
     * Remove producto
     *
     * @param \Wolfrc\TiendaBundle\Entity\ArticulosPedidoProveedor $producto
     */
    
public function removeProducto(WolfrcTiendaBundleEntityArticulosPedidoProveedor $producto)
    {
        
$this->producto->removeElement($producto);
    }

    
/**
     * Get producto
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    
public function getProducto()
    {
        return 
$this->producto;
    }

    
/**
     * Add imagenes
     *
     * @param \Wolfrc\OptionsBundle\Entity\Ficheros $imagenes
     * @return Productos
     */
    
public function addImagene(WolfrcOptionsBundleEntityFicheros $imagenes)
    {
        
$this->imagenes[] = $imagenes;

        return 
$this;
    }

    
/**
     * Remove imagenes
     *
     * @param \Wolfrc\OptionsBundle\Entity\Ficheros $imagenes
     */
    
public function removeImagene(WolfrcOptionsBundleEntityFicheros $imagenes)
    {
        
$this->imagenes->removeElement($imagenes);
    }

    
/**
     * Get imagenes
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    
public function getImagenes()
    {
        return 
$this->imagenes;
    }
}
  #3 (permalink)  
Antiguo 28/10/2014, 18:06
 
Fecha de Ingreso: agosto-2013
Ubicación: Oyón/Alava
Mensajes: 23
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Formulario para insertar datos en entidades con relacion M:N

Ahora posteo el formulario:

Ya siento hacerlo así.

Formulario de productos.

Código PHP:
<?php

namespace BackendTiendaBundleFormproductos
;

use 
SymfonyComponentFormAbstractType;
use 
SymfonyComponentFormFormBuilderInterface;
use 
SymfonyComponentOptionsResolverOptionsResolverInterface;

class 
ProductosType extends AbstractType{
   
    public function 
buildForm(FormBuilderInterface $builder, array $options) {
        
$builder->add('nombre','text',array('label'=>'Nombre del artículo*','attr'=>array('class'=>'entrada')))
                ->
add('code','text',array('label'=>'Código de artículo*','attr'=>array('class'=>'entrada')))
                ->
add('marca','text',array('label'=>'Marca del artículo','attr'=>array('class'=>'entrada')))
                ->
add('precio','money',array('label'=>'Precio de compra del artículo*','attr'=>array('class'=>'entrada')))
                ->
add('pvp','money',array('label'=>'Precio de venta al público','attr'=>array('class'=>'entrada')))
                ->
add('productos','entity',array('class'=>'ProductosBundle:Categoria','label'=>'Pertenece a','attr'=> array(
                    
'class'=>'select','size'=>'3'
                
)))
                ->
add('totalExistencias','number',array('label'=>'Número de artículos en stock','attr'=>array('class'=>'entrada')))
                ->
add('descripcion','textarea',array('label'=>'Descripción del artículo*','attr'=>array('class'=>'textarea')));
    }
    
    public function 
setDefaultOptions(OptionsResolverInterface $resolver) {
        
$resolver->setDefaults(array(
            
'data_class' => 'Wolfrc\ProductosBundle\Entity\Productos'
        
));
    }
    
    public function 
getName() {
        return 
'backend_tiendaBundle_newProductoType';
    }
}

Etiquetas: entidades, formulario, relacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:55.