2017-02-10 4 views
0

Ich habe eine Entität, die auf eine andere Entität mit einem zusammengesetzten Primärschlüssel verweist.Fremdschlüssel für Composite-Primärschlüssel funktioniert nicht

Ich mache einfach eine ManyToOne Beziehung. Jede Firma kann viele Geschäfte haben. Jede Gesellschaft ist Teil einer Börse und ihr eindeutiger Bezeichner ist sowohl die Börse, an der sie notiert sind, als auch ihr Aktiensymbol.

Der Fehler, die ich bekomme, wenn ich versuche, das Schema zu aktualisieren ist:

Column name ``id`` referenced for relation from Application\Entity\Trade towards Application\Entity\Company does not exist.

Ich denke, es versucht zu id auf das Unternehmen Standard. Gibt es eine Möglichkeit, mehrere Fremdschlüssel für den Primärschlüssel in einer Tabelle anzugeben?

<?php 
namespace Application\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 

/** 
* @ORM\Entity 
* @ORM\Table(name="trade") 
*/ 
class Trade 
{ 
    /** 
    * @ORM\Id 
    * @ORM\GeneratedValue 
    * @ORM\Column(name="id",type="integer") 
    */ 
    protected $id; 

    /** 
    * @ORM\Column(type="integer") 
    */ 
    protected $price; 

    /** 
    * @ORM\Column(type="integer") 
    */ 
    protected $size; 

    /** 
    * @ORM\Column(type="datetime") 
    */ 
    protected $dateTime; 

    /** 
    * @ORM\ManyToOne(targetEntity="Application\Entity\Company", inversedBy="trade") 
    */ 
    protected $company; 

    /** 
    * @return mixed 
    */ 
    public function getPrice() 
    { 
     return $this->price; 
    } 

    /** 
    * @param mixed $price 
    */ 
    public function setPrice($price) 
    { 
     $this->price = $price; 
    } 

    /** 
    * @return mixed 
    */ 
    public function getSize() 
    { 
     return $this->size; 
    } 

    /** 
    * @param mixed $size 
    */ 
    public function setSize($size) 
    { 
     $this->size = $size; 
    } 

    /** 
    * @return mixed 
    */ 
    public function getDateTime() 
    { 
     return $this->dateTime; 
    } 

    /** 
    * @param mixed $dateTime 
    */ 
    public function setDateTime($dateTime) 
    { 
     $this->dateTime = $dateTime; 
    } 

    /** 
    * @return mixed 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * @param mixed $id 
    */ 
    public function setId($id) 
    { 
     $this->id = $id; 
    } 

    /** 
    * @return mixed 
    */ 
    public function getCompany() 
    { 
     return $this->company; 
    } 

    /** 
    * @param mixed $company 
    */ 
    public function setCompany($company) 
    { 
     $this->company = $company; 
    } 
} 

Hier ist das Unternehmen Einheit, wenn die

<?php 
namespace Application\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 

/** 
* @ORM\Entity 
* @ORM\Table(name="company") 
*/ 
class Company 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(length=5) 
    */ 
    protected $symbol; 

    /** 
    * @ORM\Id @ORM\ManyToOne(targetEntity="\Application\Entity\Exchange", inversedBy="company") 
    * @ORM\JoinColumn(name="exchangeKey", referencedColumnName="exchangeKey") 
    */ 
    protected $exchange; 

    /** 
    * @return mixed 
    */ 
    public function getSymbol() 
    { 
     return $this->symbol; 
    } 

    /** 
    * @param mixed $symbol 
    */ 
    public function setSymbol($symbol) 
    { 
     $this->symbol = $symbol; 
    } 

    /** 
    * @return mixed 
    */ 
    public function getExchange() 
    { 
     return $this->exchange; 
    } 

    /** 
    * @param mixed $exchange 
    */ 
    public function setExchange($exchange) 
    { 
     $this->exchange = $exchange; 
    } 
} 

Antwort

0

hilft sollten Sie in der Lage sein, mehrere Spalten mit der @ORM\JoinColumns Anmerkung zu verweisen. Innerhalb können Sie eine oder mehrere @ORM\JoinColumn Annotationen definieren.

Zum Beispiel

/** 
* @ORM\ManyToOne(targetEntity="Application\Entity\Company", inversedBy="trade") 
* @ORM\JoinColumns({ 
*  @ORM\JoinColumn(name="symbol", referencedColumnName="symbol"), 
*  @ORM\JoinColumn(name="exchange", referencedColumnName="exchangeKey") 
* }); 
*/ 
protected $company; 

ich in der Dokumentation verknüpfen würde, aber alles, was ich finden kann, ist this.

Ein Array von @JoinColumn-Annotationen für eine @ManyToOne- oder @OneToOne-Beziehung mit einer Entität, die mehrere Bezeichner aufweist.

Verwandte Themen