复合主键上的外键不起作用

时间:2017-02-10 18:11:14

标签: php zend-framework2 doctrine

我有一个实体,它引用了具有复合主键的另一个实体。

我只是在做一个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;
    }
}

1 个答案:

答案 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注释数组。