2016-11-11 54 views
0

未能找到合適的答案,我在這裏發佈。儘管這個消息沒什麼意義,因爲在這裏沒有被稱爲id的引用列。Symfony 2引用的列名稱ID必須是主鍵列

我參考了一個現有的OpenCart 1.5數據庫,但是引用了Symfony 2 CRM的特定附加實體。在這種情況下,映射是非常棘手的,但有一個我不明白。

  • 被引用的列名「ID」必須是對目標實體類「的appbundle \實體\ Oc49Language」一主鍵列。

Oc49Language是現有Opencart的實體,但是隻有language_id沒有列稱爲id, - 並且在實體本身,也沒有任何映射沒有提及id

這裏的Oc49Language實體:

/** 
* Oc49Language 
* 
* @ORM\Table(name="oc49_language", indexes={@ORM\Index(name="name", columns={"name"})}) 
* @ORM\Entity(repositoryClass="AppBundle\Entity\Repository\Oc49LanguageRepository") 
*/ 
class Oc49Language 
{ 
    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=32, nullable=false) 
    */ 
    private $name; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="code", type="string", length=5, nullable=false) 
    */ 
    private $code; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="locale", type="string", length=255, nullable=false) 
    */ 
    private $locale; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="image", type="string", length=64, nullable=false) 
    */ 
    private $image; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="directory", type="string", length=32, nullable=false) 
    */ 
    private $directory; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="filename", type="string", length=64, nullable=false) 
    */ 
    private $filename; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="sort_order", type="integer", nullable=false) 
    */ 
    private $sortOrder; 

    /** 
    * @var boolean 
    * 
    * @ORM\Column(name="status", type="boolean", nullable=false) 
    */ 
    private $status; 

    /** 
    * @var ArrayCollection 
    * 
    * @ORM\ManyToMany(targetEntity="\AppBundle\Entity\Species", inversedBy="languageName") 
    */ 
    private $species; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="language_id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $languageId; 


    /** 
    * Constructor 
    */ 
    public function __construct() 
    { 
     $this->species = new ArrayCollection(); 
    } 
.... etc. 

試圖驗證時,我也是在控制檯中看到一個ORMException消息:

列名id的關係走向的appbundle引用從 的appbundle \實體\ Oc49Language \實體\物種確實不存在 。

這是真的 - 它不存在;但也沒有提及它!

我在這裏錯過了一些非常明顯的東西,還是更復雜一點?這是我試圖解決的所有錯誤中的最後一個,但是這個確實令我困惑,所以任何幫助表示讚賞。

編輯:根據要求,這是種實體:

<?php 

namespace AppBundle\Entity; 

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

/** 
* Species 
* 
* @ORM\Table(name="species") 
* @ORM\Entity(repositoryClass="AppBundle\Entity\Repository\SpeciesRepository") 
*/ 
class Species 
{ 
    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=45, nullable=true) 
    */ 
    private $name; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="note", type="text", nullable=true) 
    */ 
    private $note; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="language_id", type="text", nullable=false) 
    */ 
    private $languageId; 

    /** 
    * @var \AppBundle\Entity\Oc49Language 
    * 
    * @ORM\OneToMany(targetEntity="\AppBundle\Entity\Oc49Language", mappedBy="species") 
    */ 
    private $languageName; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var \Doctrine\Common\Collections\Collection 
    * 
    * @ORM\OneToMany(targetEntity="AppBundle\Entity\Breed", mappedBy="species") 
    */ 
    private $breed; 

    /** 
    * @var \Doctrine\Common\Collections\Collection 
    * 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Pet", inversedBy="species") 
    */ 
    private $pet; 

    /** 
    * @var \Doctrine\Common\Collections\Collection 
    * 
    * @ORM\OneToMany(targetEntity="AppBundle\Entity\Illness", mappedBy="species") 
    */ 
    private $illness; 

    /** 
    * Constructor 
    */ 
    public function __construct() 
    { 
     $this->breed = new ArrayCollection(); 
     $this->pet = new ArrayCollection(); 
     $this->illness = new ArrayCollection(); 
    } 

    ... 
} 

回答

0

每個實體類必須有一個主鍵。

您可以使用@Id註釋選擇作爲標識符的字段。

參考:http://docs.doctrine-project.org/en/latest/reference/basic-mapping.html#identifiers-primary-keys


編輯: 的品種實體,替換:

 /** 
    * @var \AppBundle\Entity\Oc49Language 
    * 
    * @ORM\OneToMany(targetEntity="\AppBundle\Entity\Oc49Language", mappedBy="species") 
    */ 
    private $languageName; 

有:

 /** 
    * @var \AppBundle\Entity\Oc49Language 
    * 
    * @ORM\OneToMany(targetEntity="\AppBundle\Entity\Oc49Language", mappedBy="species") 
    * @ORM\JoinColumn(name="language_id", referencedColumnName="languageId") 
    */ 
    private $languageName; 
+0

這不是問題 - 如果你看過我發佈的代碼,你會看到主鍵是ca lled'language_id' - 我試圖找出它所聲稱的引用列名稱實際上是一個問題。 –

+0

你可以發佈實體AppBundle \ Entity \ Species嗎?您可能已將映射列指定爲Id,而不是languageId – progg

+0

已將此問題添加到問題中,謝謝 –

相關問題