我有一个实体,它引用了具有复合主键的另一个实体。
我只是在做一个ManyToOne关系。每家公司都可以进行多笔交易。每家公司都是某些证券交易所的一部分,其唯一标识符是他们在其上市的证券交易所及其股票代码。
我尝试更新架构时收到的错误是:
Column name ``id`` referenced for relation from Application\Entity\Trade towards Application\Entity\Company does not exist.
我认为它试图在公司上默认为id
。有没有办法在一个表上为主键指定多个外键?
<?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;
}
}
如果有帮助,这里是公司实体
<?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;
}
}
答案 0 :(得分:0)
您应该能够使用@ORM\JoinColumns
注释引用多个列。在里面,您可以定义一个或多个@ORM\JoinColumn
注释。
例如
/**
* @ORM\ManyToOne(targetEntity="Application\Entity\Company", inversedBy="trade")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="symbol", referencedColumnName="symbol"),
* @ORM\JoinColumn(name="exchange", referencedColumnName="exchangeKey")
* });
*/
protected $company;
我打算链接到文档,但我能找到的只有this。
与具有多个标识符的实体的@ManyToOne或@OneToOne关系的@JoinColumn注释数组。