Symfony2 Doctrine2 ManyToMany复合键引用的列名称不存在

FoW*_*FoW 4 mapping many-to-many composite-primary-key symfony doctrine-orm

我在反面有一个复合键的ManyToMany关系.当我使用控制台命令doctrine:schema:update时出现以下错误:

[Doctrine\ORM\ORMException]
Column name `keyword` referenced for relation from Map\MapBundle\Entity\
Student towards Map\MapBundle\Entity\SkillType does not exist.
Run Code Online (Sandbox Code Playgroud)

我有一个实体学生(唯一键)与一个实体技能(复合键)具有ManyToMany关系,它与skillType(唯一键)具有ManyToOne关系.

这是我有不同的类映射:

班级学生

<?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;
}
Run Code Online (Sandbox Code Playgroud)

班级技能

<?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;
}
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

我试图交换keywordattribut@joinColumn行,但我有相同的错误消息attribut而不是keyword.

我看不出我的映射有什么问题.表技能存在并且具有名为keyword和的列attribut.

我希望有人会看到我犯了错误的地方(可能是一个错字错误,比如丢失的字符或案例错误).

FoW*_*FoW 5

谢谢您的回答.它帮助了我很多,我成功地进行了架构更新.

这是我最终使用的代码

/**
 * @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;
Run Code Online (Sandbox Code Playgroud)