2016-12-31 79 views
1

我必須重寫從zf1到sf2的應用程序。 但我需要保留舊的數據庫模式。 我有許多關係的問題。與保持舊數據庫的多對多關係

有2個實體:異常,區域,它也是Exceptionregions,但我刪除它。 數據庫中有3個表 - 異常,區域和異常區域,這是散列表。 下面附上屏幕關係:

screen with relations

我的代碼: 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. 
    

    當然,實體異常與少數實體連接,而不僅僅是區域。 我被這個問題困住了,我無法解決這個問題並繼續我的項目。 任何人有任何想法如何修復這個或任何建議?我究竟做錯了什麼? 我很感激任何評論。

    +0

    我沒有看到在代碼中任何地方定義的列標識。要麼你沒有向我們展示代碼,或者你沒有清除緩存。使用:'php bin/console cache:clear --env = prod'清除你的生產緩存。 –

    +0

    @Alvin Bunk感謝您的評論。緩存被清除。這些表中的ID被稱爲RegionID和ExceptionID(在實體屬性中:regionid和exceptionid)。我知道問題可能與ID的名稱有關,但我無法改變它們。該如何處理這些名稱? – r3m4k3

    回答

    0

    我找到了解決這個問題的辦法。 也許有人會從中受益。

    因此,工作代碼:

    /** 
    * Many exceptions have many regions. 
    * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Regions", inversedBy="exceptions") 
    * @ORM\JoinTable(name="exceptionregions", 
    * joinColumns={ 
    *  @ORM\JoinColumn(name="ExceptionID", referencedColumnName="ExceptionID") 
    * }, 
    * inverseJoinColumns={ 
    *  @ORM\JoinColumn(name="RegionID", referencedColumnName="RegionID") 
    * }) 
    */ 
    private $regions; 
    

    @Alvin,感謝您的承諾。

    0

    你有沒有試圖使關係雙向像這樣:

    class Exceptions{ 
    ... 
        /** 
        * Many exceptions have many regions. 
        * @ORM\ManyToMany(targetEntity="Regions", inversedBy="exceptions") 
        * @ORM\JoinTable(name="regions_exceptions") 
        */ 
        private $regions; 
    

    class Regions{ 
    ... 
        /** 
        * @ORM\ManyToMany(targetEntity="Exceptions", mappedBy="regions") 
        */ 
        private $exceptions; 
    

    不知道這會的工作,但你可以試試。

    文檔瀏覽: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#many-to-many-bidirectional

    **編輯#2 ** 你可以試試這個變化:

    class Exceptions 
    { 
    
        /** 
        * @var integer 
        * 
        * @ORM\Id 
        * @ORM\Column(name="ExceptionID", type="integer") 
        * @ORM\GeneratedValue(strategy="AUTO") 
        */ 
        protected $exceptionid; 
    

    而且,如果還是不行,請嘗試:

    php bin/console doctrine:schema:update --force 
    
    +0

    是的,我嘗試過雙向和單向關係。兩者都給了我相同的結果,我上面提到的錯誤。在我看來,問題是ID的名稱。 – r3m4k3

    +0

    我做了一個編輯。你可以嘗試編輯#2的變化。只是想幫助。我對這個問題感到不知所措。 –

    +0

    嗨,謝謝你的幫助,我很欣賞這一點。我也很困惑。但不幸的是,改變變量的作用域也不起作用。更新模式給了我相同的結果。 – r3m4k3