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

Problema con Entidades y Foregin Key con Doctrine2 en Symfony2

Estas en el tema de Problema con Entidades y Foregin Key con Doctrine2 en Symfony2 en el foro de Symfony en Foros del Web. Buenos dias, tengo un problema a la hora de recuperar tablas relacionadas. El primera problema que tengo es que no se si mi esquema y ...
  #1 (permalink)  
Antiguo 22/11/2011, 06:45
 
Fecha de Ingreso: marzo-2006
Mensajes: 230
Antigüedad: 18 años, 9 meses
Puntos: 2
Problema con Entidades y Foregin Key con Doctrine2 en Symfony2

Buenos dias, tengo un problema a la hora de recuperar tablas relacionadas. El primera problema que tengo es que no se si mi esquema y mis entidades estan bien generadas, en el YML me pone en las relaciones OneToOne(deberian ser 1 a N) y en las entidades no encuentra nada que haga mencion a las relaciones. Y el segundo que no se cual es el mejor metodo para recuperar esas entidades. Os explico como son las relaciones, tengo 3 tablas CLI_Clientes, PRO_Productos y PRO_Productocliente, las dos primeras se relacionan de uno a N con la tercera, es decir una empresa puede tener varios productos y un producto puede existir en varias empresas. Ahora os paso los YML que me genera para el caso de la tabla intermedia(las FK me pone OneToOne, que me huele mal), la entidad generada y como intento acceder a los datos en el controlador.

Aqui va el YML de la tabla, no entiendo porque las relaciones me las pone 1 a 1 pero bueno...

Código YML:
Ver original
  1. Acme\DemoBundle\Entity\ProProductocliente:
  2.   type: entity
  3.   table: PRO_ProductoCliente
  4.   fields:
  5.     pidproductocliente:
  6.       id: true
  7.       type: integer
  8.       unsigned: false
  9.       nullable: false
  10.       column: PidProductoCliente
  11.       generator:
  12.         strategy: IDENTITY
  13.     precio:
  14.       type: decimal
  15.       nullable: true
  16.       column: Precio
  17.     imagen:
  18.       type: string
  19.       length: 45
  20.       fixed: false
  21.       nullable: true
  22.       column: Imagen
  23.   oneToOne:
  24.     sidproducto:
  25.       targetEntity: ProProductos
  26.       cascade: {  }
  27.       mappedBy: null
  28.       inversedBy: null
  29.       joinColumns:
  30.         SidProducto:
  31.           referencedColumnName: PidProducto
  32.       orphanRemoval: false
  33.     sidcliente:
  34.       targetEntity: CliClientes
  35.       cascade: {  }
  36.       mappedBy: null
  37.       inversedBy: null
  38.       joinColumns:
  39.         SidCliente:
  40.           referencedColumnName: PIdCliente
  41.       orphanRemoval: false
  42.   lifecycleCallbacks: {  }

Aqui la entidad que me crea, en la cual noto que no hay ninguna referencia a ninguna relacion...
Código PHP:
  <?php

namespace AcmeDemoBundleEntity
;

use 
DoctrineORMMapping as ORM;

/**
 * Acme\DemoBundle\Entity\ProProductocliente
 */
class ProProductocliente
{
    
/**
     * @var integer $pidproductocliente
     */
    
private $pidproductocliente;

    
/**
     * @var decimal $precio
     */
    
private $precio;

    
/**
     * @var string $imagen
     */
    
private $imagen;

    
/**
     * @var Acme\DemoBundle\Entity\ProProductos
     */
    
private $sidproducto;

    
/**
     * @var Acme\DemoBundle\Entity\CliClientes
     */
    
private $sidcliente;


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

    
/**
     * Set precio
     *
     * @param decimal $precio
     */
    
public function setPrecio($precio)
    {
        
$this->precio $precio;
    }

    
/**
     * Get precio
     *
     * @return decimal 
     */
    
public function getPrecio()
    {
        return 
$this->precio;
    }

    
/**
     * Set imagen
     *
     * @param string $imagen
     */
    
public function setImagen($imagen)
    {
        
$this->imagen $imagen;
    }

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

    
/**
     * Set sidproducto
     *
     * @param Acme\DemoBundle\Entity\ProProductos $sidproducto
     */
    
public function setSidproducto(AcmeDemoBundleEntityProProductos $sidproducto)
    {
        
$this->sidproducto $sidproducto;
    }

    
/**
     * Get sidproducto
     *
     * @return Acme\DemoBundle\Entity\ProProductos 
     */
    
public function getSidproducto()
    {
        return 
$this->sidproducto;
    }

    
/**
     * Set sidcliente
     *
     * @param Acme\DemoBundle\Entity\CliClientes $sidcliente
     */
    
public function setSidcliente(AcmeDemoBundleEntityCliClientes $sidcliente)
    {
        
$this->sidcliente $sidcliente;
    }

    
/**
     * Get sidcliente
     *
     * @return Acme\DemoBundle\Entity\CliClientes 
     */
    
public function getSidcliente()
    {
        return 
$this->sidcliente;
    }
}
Y por ultimo como intento acceder a los datos, que no me deja porque me dice:[Semantical Error] line 0, col 97 near 'p': Error: Class Acme\DemoBundle\Entity\ProProductocliente has no association named ProProductos
Código PHP:
$repository $this->getDoctrine()->getRepository('AcmeDemoBundle:ProProductocliente');
                
                
$query $em->createQuery('SELECT pc, p FROM AcmeDemoBundle:ProProductocliente pc 
                    JOIN pc.ProProductos p'
);

                
$result =    $query->getResult(); 
Perdon por el ladrillo de codigo, y muchas gracias!!
  #2 (permalink)  
Antiguo 23/11/2011, 07:22
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 4 meses
Puntos: 1532
Respuesta: Problema con Entidades y Foregin Key con Doctrine2 en Symfony2

te recuerdo que el parser de doctrine 2 tiene un 80% de efectividad, cada vez que lo uses debes de revisar y realizar los cambios respectivos para que tu modelo sea efectivo, intenta hacer un doctrine:schema:update --dump-sql para verificar si no genera un DDL para evitar que tu DB cambie

un problema que tuve con postgres es que cuando uso schemas en postgres, doctrine creaba entidades schema.class por lo cual generaba errores de sintaxis en PHP, por lo cual con las modificaciones necesarias funcionó de maravillas
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...

Etiquetas: doctrine2, entidades, key, php, select, symfony2
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 08:02.