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

Guardar datos en Tablas de Muchos a muchos Doctrine 2 y symfony 2.3

Estas en el tema de Guardar datos en Tablas de Muchos a muchos Doctrine 2 y symfony 2.3 en el foro de Symfony en Foros del Web. Hola amigos, gracias por sus aportes a mis consultas y errores, estoy desarrollando una aplicación que relaciones datos de un vehículo con un conductor, a ...
  #1 (permalink)  
Antiguo 20/02/2014, 10:27
 
Fecha de Ingreso: noviembre-2013
Mensajes: 83
Antigüedad: 11 años, 1 mes
Puntos: 0
Guardar datos en Tablas de Muchos a muchos Doctrine 2 y symfony 2.3

Hola amigos, gracias por sus aportes a mis consultas y errores, estoy desarrollando una aplicación que relaciones datos de un vehículo con un conductor, a nivel de base de datos tengo una tabla llamada vehiculos donde guardo todo lo referente al vehiculo (marca, placa, color, etc) otra tabla llamada conductor (nombre, licencia, etc) y una tabla intermedia donde guardo las claves foraneas de los vechiculos y conductores, porque un vechiculo puede tener muchos conductores y muchos conductores pueden manejar uno o muchos vechiculos... Explico esto para entrar en detalle a mi problema en symfony

al hacer el mapeo de las entidades, doctrine no mapea ni genera una entidad para la tabla intermedia (enroll_car_conductor), en cambio a una de las entidades hace referencia a la tabla intermedia, pongo el codigo de mi entidad
Código PHP:
<?php
namespace ABCPreEnrollmentBundleEntity
;
use 
DoctrineORMMapping as ORM;
/**
 * EnrollCar
 */
class EnrollCar
{ ...
/**
     * @var \Doctrine\Common\Collections\Collection
     * @ORM\ManyToMany(targetEntity="EnrollConductor", inversedBy="enrollCar")
     * @ORM\JoinTable(name="enroll_car_conductor",
     *   joinColumns={
     *     @ORM\JoinColumn(name="enroll_car_id", referencedColumnName="id")
     *   },
     *   inverseJoinColumns={
     *     @ORM\JoinColumn(name="enroll_conductor_id", referencedColumnName="id")
     *   }
     * )
     */
    
private $enrollConductor;
Ya hice una vista donde guardo los datos de los vehiculos, ahora estoy haciendo una donde ingreso los conductores, pero los quiero relacionar y me surge este error
Código:
A "__toString()" method was not found on the objects of type "ABC\PreEnrollmentBundle\Entity\EnrollCar" passed to the choice field. To read a custom getter instead, set the option "property" to the desired property path.
Como puedo hacer para que al guardar un conductor tambien guarde a que vehiculo esta asociado???
  #2 (permalink)  
Antiguo 20/02/2014, 10:58
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Guardar datos en Tablas de Muchos a muchos Doctrine 2 y symfony 2.3

Hace referencia a la tabla intermedia no a la entidad y si sigues las convenciones de doctrine no es necesario declarar JoinTable.
Fuera de esto, el error que muestras esta relacionado a los forms, tienen que hacer lo que te indica el error, definir __toString en la entidad y retornar la propiedad que quieres que aparezca en el select o bien definir esta propiedad en la opción property del form.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 22/02/2014, 19:45
 
Fecha de Ingreso: febrero-2014
Ubicación: Edo. México
Mensajes: 85
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Guardar datos en Tablas de Muchos a muchos Doctrine 2 y symfony 2.3

Hola pmeninsaxmus16, tambien soy nuevo en esto Symfony pero curiosamente estoy trabajando con una relacion de tablas similares a la tuya, a ver si te puedo ayudar.
Igualmente tengo 3 tablas
1.-Torneos
2.-Inscripcionequipo (esta tabla es mi tabla intermedia)
3.-Equipos
Te pongo como quedaron mis entidades a ver si de algo te ayudan:

Código PHP:
<?php
use DoctrineORMMapping as ORM;
use 
DoctrineCommonCollectionsArrayCollection;


class 
Torneos
{
   ......    
    
    
/**
     * @ORM\OneToMany(targetEntity="Inscripcionequipo", mappedBy="idTorneo", cascade={"persist"})
     */    
    
private $insEqTorneos;
            
    public function 
__construct()
    {
        
$this->insEqTorneos = new ArrayCollection();
    }
    
.....

    
/**
     * Add insEqTorneos
     *
     * @param \Futbol\MainBundle\Entity\Inscripcionequipo $insEqTorneos
     * @return Torneos
     */
    
public function addInsEqTorneo(Inscripcionequipo $insEqTorneos)
    {
//        $this->insEqTorneos[] = $insEqTorneos;

          
$insEqTorneos->setIdTorneo($this);
          
$this->insEqTorneos->add($insEqTorneos);

        return 
$this;
    }

    
/**
     * Remove insEqTorneos
     *
     * @param \Futbol\MainBundle\Entity\Inscripcionequipo $insEqTorneos
     */
    
public function removeInsEqTorneo(FutbolMainBundleEntityInscripcionequipo $insEqTorneos)
    {
        
$this->insEqTorneos->removeElement($insEqTorneos);
    }

    
/**
     * Get insEqTorneos
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    
public function getInsEqTorneos()
    {
        return 
$this->insEqTorneos;
    }
}
Código PHP:
<?php
use DoctrineORMMapping as ORM;

class 
Inscripcionequipo
{
 
// .....

    /**
     * @var \Equipos
     *
     * @ORM\ManyToOne(targetEntity="Equipos", inversedBy="insEqEquipos", cascade={"persist"})
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="id_Equipo", referencedColumnName="id")
     * })
     */
    
private $idEquipo;

    
/**
     * @var \Torneos
     *
     * @ORM\ManyToOne(targetEntity="Torneos", inversedBy="insEqTorneos", cascade={"persist"})
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="id_Torneo", referencedColumnName="id")
     * })
     */
    
private $idTorneo;

   
    
/**
     * Set idEquipo
     *
     * @param \Futbol\MainBundle\Entity\Equipos $idEquipo
     * @return Inscripcionequipo
     */
    
public function setIdEquipo(FutbolMainBundleEntityEquipos $idEquipo null)
    {
        
$this->idEquipo $idEquipo;

        return 
$this;
    }

    
/**
     * Get idEquipo
     *
     * @return \Futbol\MainBundle\Entity\Equipos 
     */
    
public function getIdEquipo()
    {
        return 
$this->idEquipo;
    }

    
/**
     * Set idTorneo
     *
     * @param \Futbol\MainBundle\Entity\Torneos $idTorneo
     * @return Inscripcionequipo
     */
    
public function setIdTorneo(FutbolMainBundleEntityTorneos $idTorneo null)
    {
        
$this->idTorneo $idTorneo;

        return 
$this;
    }

    
/**
     * Get idTorneo
     *
     * @return \Futbol\MainBundle\Entity\Torneos 
     */
    
public function getIdTorneo()
    {
        return 
$this->idTorneo;
    }
Código PHP:
<?php
use DoctrineORMMapping as ORM;
use 
DoctrineCommonCollectionsArrayCollection;


class 
Equipos
{
   /...

/**
     * @ORM\OneToMany(targetEntity="Inscripcionequipo", mappedBy="idEquipo", cascade={"persist"} )
     */
    
    
private $insEqEquipos;
            
    public function 
__construct()
    {
        
$this->insEqEquipos = new ArrayCollection();
    }

  
    
/**
     * Add insEqEquipos
     *
     * @param \Futbol\MainBundle\Entity\Inscripcionequipo $insEqEquipos
     * @return Equipos
     */
    
public function addInsEqEquipo(FutbolMainBundleEntityInscripcionequipo $insEqEquipos)
    {
        
$this->insEqEquipos[] = $insEqEquipos;

        return 
$this;
    }

    
/**
     * Remove insEqEquipos
     *
     * @param \Futbol\MainBundle\Entity\Inscripcionequipo $insEqEquipos
     */
    
public function removeInsEqEquipo(FutbolMainBundleEntityInscripcionequipo $insEqEquipos)
    {
        
$this->insEqEquipos->removeElement($insEqEquipos);
    }

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

Última edición por Esdras_mtz; 22/02/2014 a las 19:53

Etiquetas: doctrine, muchos, tablas
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 09:22.