Symfony2:一个实体内的多对多映射> SQL错误

时间:2014-02-21 11:18:59

标签: php sql entity-framework symfony doctrine-orm

前言:我正在开发一个在线测验系统。我有一个实体“测验”。该实体可以是编译测验,也可以不是。如果它是一个编译测验,那么它包含链接到它的其他非编译测验。非编译测验可以链接到多个编译测验,因此关系映射是实体“测验”中的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原则自动完成,我不知道如何解决这个问题。

非常感谢任何帮助/建议。

1 个答案:

答案 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;