Supongamos que tengo una oferta, que puede tener rango 1-n. Inmediatamente piensas, "pon un offer_id dentro de Range".¿Cómo tratar la asociación en entidades clave compuestas con Doctrine2?
Pero mi oferta tiene una clave principal compuesta (compuesta por dos campos). No hay una columna de identificación AUTOINCREMENTO.
documentaciónEl Doctrine2 no dice mucho sobre ese caso en particular, aquí está mi entidades:
<?php
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table()
* @ORM\Entity
*/
class Offer
{
/**
* @var Site $site
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Site")
* @ORM\JoinColumn(name="site_id", referencedColumnName="id")
*/
private $site;
/**
* @var string $pouet
* @ORM\Id
* @ORM\Column(name="pouet", type="string", length=255)
*/
private $pouet;
}
<?php
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table(name="RangeItem")
* @ORM\Entity
*/
class Range
{
/**
* @todo This is test code only do not push me :-)
* @var ArrayCollection
* @ORM\ManyToOne(targetEntity="Offer")
*/
private $offers;
}
I obtaind este error:
[Doctrine\ORM\ORMException]
Column nameid
referenced for relation from Pouet\MyBundle\Entity\Range towards Pouet\MyBundle\Entity\Offer does not exist.
que tienen sentido, pero ¿cómo puedo tratar yo con este problema? ¿Está prohibido que una tabla con clave primaria compuesta tenga asociaciones en él?
Tengo una clave compuesta, la clave principal de mi oferta es la combinaison de $ site AND $ pouet. Es por eso que no puedo usar referenciaColumnName, no hay un nombre de columna para PK cuando tiene uno compuesto. – Damien
Tengo, edición. – Problematic
Thx para el enlace, pero eso tampoco funciona. Todavía no puedo entender cómo hacer referencia a mi objeto Oferta dentro de otras entidades. Estoy pensando seriamente en descartar la clave compuesta sexy para tener un ID autoincrementado simple en su lugar (y un índice ÚNICO en mis campos). – Damien