Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/11/2011, 06:45
utopiko
 
Fecha de Ingreso: marzo-2006
Mensajes: 230
Antigüedad: 18 años, 3 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!!