2011-08-03 15 views
7

1-n Aralığım olan bir Teklifim olduğunu varsayalım. Hemen "bir Range_id in range" seçeneğini düşünün.Doctrine2 ile birleşik anahtar varlıklarla ilişki nasıl ele alınır?

Ancak Teklifim birleşik bir birincil anahtara (iki alandan oluşur) sahiptir. AUTOINCREMENT kimliği sütunu yok.

Doctrine2 belgeleri söz konusu durum hakkında pek söylemez, işte benim varlıklar: Ben bu hatayı obtaind

<?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; 
} 

: mantıklı, ama nasıl başa çıkabilirim

[Doctrine\ORM\ORMException]
Column name id referenced for relation from Pouet\MyBundle\Entity\Range towards Pouet\MyBundle\Entity\Offer does not exist.

bu sorunla mı? Kompozit birincil anahtar içeren bir tablo üzerinde dernekler olması yasak mı? ,

/** 
* @ORM\ManyToOne(targetEntity="Offer") 
* @ORM\JoinColumn(name="offer_pouet", referencedColumnName="pouet") 
*/ 
private $offers; 

bunları belirtmek yoksa @JoinColumn için varsayılan, offer_id ve id olacağından:

cevap

1

Sen Kimliği kullanmak istediğinizi belirtmek için Range sınıfında @JoinColumn notu kullanın gerekir sırasıyla, manuel olarak belirtmeniz gerekir (pouet'un Offer sınıfınız için benzersiz bir değer olduğunu varsayalım).

DÜZENLEME: Yorumunuza dayanarak, Composite Primary Key için Doktrin Proje sitesinde bir eğitici buldum. Varlık ilişkisi, bir anahtar için mappedBy, diğeri için indexBy vardır. Umarım yardımcı olur.

+0

Bileşik bir anahtarım var, Teklif birincil anahtarım $ site VE $ pouet'in birleştirilmesidir. Bu yüzden referenceColumnName kullanamıyorum, bir kompozitiniz varsa PK için sütun adı yok. – Damien

+0

Yakalama, düzenleme. Bağlantı için – Problematic

+0

Thx, ancak bu da çalışmıyor. Nesne teklifimi diğer varlıklar içinde nasıl referans göstereceğimi hala anlayamıyorum. Ciddi bir şekilde, otomatik olarak artırılmış bir kimliğe (ve benim alanlarımda BENZERİ BİR dizin) sahip olmak için seksi bileşik anahtarın düşürülmesini düşünüyorum. – Damien

İlgili konular