我必須重寫從zf1到sf2的應用程序。 但我需要保留舊的數據庫模式。 我有許多關係的問題。與保持舊數據庫的多對多關係
有2個實體:異常,區域,它也是Exceptionregions,但我刪除它。 數據庫中有3個表 - 異常,區域和異常區域,這是散列表。 下面附上屏幕關係:
我的代碼: 1.異常實體:
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* Exceptions
*
* @ORM\Table(name="Exceptions")
* @ORM\Entity
*/
class Exceptions
{
/**
* @var integer
*
* @ORM\Column(name="ExceptionID", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $exceptionid;
/**
* Many exceptions have many regions.
* @ORM\ManyToMany(targetEntity="Regions", inversedBy="exceptions")
* @ORM\JoinTable(name="exceptionregions"),
* joinColumns={@ORM\JoinColumn(name="ExceptionID", referencedColumnName="ExceptionID")},
* inverseJoinColumns={@ORM\JoinColumn(name="RegionID", referencedColumnName="RegionID")}
*)
*/
private $regions;
public function __construct()
{
$this->regions = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Add region
*
* @param AppBundle\Entity\Regions $region
*/
public function addRegion(\AppBundle\Entity\Regions $regions)
{
$this->regions[] = $regions;
}
/**
* Get regions
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getRegions()
{
return $this->regions;
}
...
}
地區實體:
<?php namespace AppBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * Regions * * @ORM\Table(name="Regions") * @ORM\Entity */ class Regions { /** * @var string * * @ORM\Column(name="RegionName", type="string", length=45, nullable=false) */ private $regionname; /** * @var integer * * @ORM\Column(name="RegionID", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $regionid; /** * @ORM\ManyToMany(targetEntity="Exceptions", mappedBy="regions") */ private $exceptions; ... }
而我得到這個錯誤:
The column id must be mapped to a field in class AppBundle\Entity\Exceptions since it is referenced by a join column of another class.
當然,實體異常與少數實體連接,而不僅僅是區域。 我被這個問題困住了,我無法解決這個問題並繼續我的項目。 任何人有任何想法如何修復這個或任何建議?我究竟做錯了什麼? 我很感激任何評論。
我沒有看到在代碼中任何地方定義的列標識。要麼你沒有向我們展示代碼,或者你沒有清除緩存。使用:'php bin/console cache:clear --env = prod'清除你的生產緩存。 –
@Alvin Bunk感謝您的評論。緩存被清除。這些表中的ID被稱爲RegionID和ExceptionID(在實體屬性中:regionid和exceptionid)。我知道問題可能與ID的名稱有關,但我無法改變它們。該如何處理這些名稱? – r3m4k3