前言:我正在开发一个在线测验系统。我有一个实体“测验”。该实体可以是编译测验,也可以不是。如果它是一个编译测验,那么它包含链接到它的其他非编译测验。非编译测验可以链接到多个编译测验,因此关系映射是实体“测验”中的ManyToMany。
从实体\ Quiz.php中提取:
/**
* @var boolean
*
* @ORM\Column(name="compilation", type="boolean")
* @Ser\Expose
*/
private $compilation;
/**
* @var Quiz[]
*
* @ORM\ManyToMany(targetEntity="CriticalReading\QuizBundle\Entity\Quiz", inversedBy="compiledQuiz")
*/
private $subQuizes;
/**
* @var Quiz
*
* @ORM\ManyToMany(targetEntity="CriticalReading\QuizBundle\Entity\Quiz", mappedBy="subQuizes")
*/
private $compiledQuiz;
架构验证没有显示任何错误,但是由教条(quiz_quiz)自动创建的链接表仅使用一列“quiz_id”创建。此外,当尝试使用$compilationQuiz->addSubQuiz($subQuiz);
将一个subQuiz链接到编译测验时,Symfony2会返回错误:
使用params [1,null]执行'INSERT INTO quiz_quiz(quiz_id,quiz_id)VALUES(?,?)'时发生异常: SQLSTATE [42000]:语法错误或访问冲突:1110列'quiz_id'指定了两次
由于链接表的整个处理和链接记录的创建完全由Symfony2原则自动完成,我不知道如何解决这个问题。
非常感谢任何帮助/建议。
答案 0 :(得分:1)
尝试指定列名明确:
/**
* @ORM\ManyToMany(targetEntity="CriticalReading\QuizBundle\Entity\Quiz", inversedBy="compiledQuiz")
* @ORM\JoinTable(name="quiz_quiz",
* joinColumns={@ORM\JoinColumn(name="compiled_quiz_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="sub_quiz_id", referencedColumnName="id")}
* )
*/
private $subQuizes;