3

我有一個ManyToMany關係與反面的組合鍵。 當我使用控制檯命令學說:架構:更新我有以下錯誤:Symfony2 Doctrine2 ManyToMany組合鍵引用的列名不存在

[Doctrine\ORM\ORMException] 
Column name `keyword` referenced for relation from Map\MapBundle\Entity\ 
Student towards Map\MapBundle\Entity\SkillType does not exist. 

我有一個實體的學生(唯一鍵)與實體技能(組合鍵),其具有多對一一個多對多關係與skillType(唯一鍵)的關係。

這裏是不同類的映射我有:

類學生

<?php 
namespace Map\MapBundle\Entity; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* Student 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="Map\MapBundle\Entity\StudentRepository") 
*/ 
class Student { 
    /** 
    * 
    * @var integer @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\ManyToMany(targetEntity="Map\MapBundle\Entity\SkillType") 
    * @ORM\JoinTable(name="students_skills", 
    *  joinColumns={ 
    *  @ORM\JoinColumn(name="keyword", referencedColumnName="keyword"), 
    *  @ORM\JoinColumn(name="attribut", referencedColumnName="attribut") 
    * }) 
    */ 
    private $skills; 
} 

類技術人員

<?php 
namespace Map\MapBundle\Entity; 
use Doctrine\ORM\Mapping as ORM; 
/** 
* Skill 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="Map\MapBundle\Entity\SkillRepository") 
*/ 
class Skill { 
    /** 
    * @ORM\ManyToOne(targetEntity="Map\MapBundle\Entity\skillType") 
    * @ORM\JoinColumn(name="keyword", referencedColumnName="keyword") 
    * @ORM\Id 
    */ 
private $keyword; 
} 

CLASSE skillType

<?php 
namespace Map\MapBundle\Entity; 
use Doctrine\ORM\Mapping as ORM; 
/** 
* SkillType 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="Map\MapBundle\Entity\SkillTypeRepository") 
*/ 
class SkillType { 
    /** 
    * @var string 
    * 
    * @ORM\Column(name="keyword", type="string", length=255) 
    * @ORM\Id 
    */ 
    private $keyword; 
} 

我試圖交換噸他keywordattribut @joinColumn行,但我有attribut而不是keyword相同的錯誤消息。

我看不出我的映射有什麼問題。表格技巧存在並且具有名稱爲keywordattribut的列。

我希望有人會看到我犯了一個錯誤(可能是一個錯字錯誤,如缺少字符或大小寫錯誤)。

回答

3

你寫信你想要StudentSkill有多對多的關係,但是你用SkillType代替它。並且您錯過了inverseJoinColumns屬性,並且您沒有正確引用Student

試試下面的註釋(未經測試,看documentation後):

/** 
* @ORM\ManyToMany(targetEntity="Map\MapBundle\Entity\Skill") 
* @ORM\JoinTable(name="students_skills", 
*  joinColumns={@ORM\JoinColumn(name="student_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="skill_keyword", referencedColumnName="keyword")} 
*) 
*/ 
private $skills; 
4

謝謝您的回答。它幫助了我很多,並且我成功地進行了模式更新。

這裏是我finaly使用

/** 
* @ORM\ManyToMany(targetEntity="Carte\CarteBundle\Entity\Skill") 
* @ORM\JoinTable(name="students_skills", 
*  joinColumns={@ORM\JoinColumn(name="student_id", referencedColumnName="id")}, 
*  inverseJoinColumns={ 
*  @ORM\JoinColumn(name="keyword", referencedColumnName="keyword"), 
*  @ORM\JoinColumn(name="attribut", referencedColumnName="attribut") 
* }) 
*/ 
private $skills; 
代碼