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)
我试图交换keyword
和attribut
@joinColumn行,但我有相同的错误消息attribut
而不是keyword
.
我看不出我的映射有什么问题.表技能存在并且具有名为keyword
和的列attribut
.
我希望有人会看到我犯了错误的地方(可能是一个错字错误,比如丢失的字符或案例错误).
谢谢您的回答.它帮助了我很多,我成功地进行了架构更新.
这是我最终使用的代码
/**
* @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)