我有一个名为“ student_assignment”的表,其中有多个列,下面从其中显示其中两个:
这两个列也是外键。
StudentId assignmentId
1 6 -> allowed
2 3 -> allowed
3 1 -> allowed
2 3 -> not allowed, the combination of 2 3 already exists in table.
我已经成功地将这两列组合在一起。
我正在使用多项选择功能来向多个学生分配作业,例如“ 3号作业”。这些学生已经具有作业3 ,无法重新分配。 当我两次给学生分配“ 习题3 ”时,会抛出错误:
错误:
SQLSTATE [23000]:违反完整性约束:1062重复的条目 键“ assignment_unique”为“ 2-3”
我想要一个解决方案,可以分配那些没有第三次作业的学生,而那些没有这些作业的学生应该被忽略。
答案 0 :(得分:0)
正如@Shady在评论中所说,您应该使用UniqueEntity约束。您可以在多个字段和组合上使用它。例如,在您的情况下,您应该这样使用它:
<constraint name="Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity">
<option name="fields">
<value>fieldOne</value>
<value>fieldTwo</value>
</option>
</constraint>
注意:第一个字段将显示错误(如果有)。
答案 1 :(得分:0)
我想您从数据库中获取这些数据作为 ArrayCollection 对象。我建议您在将2添加到数据库之前,确保2不与2关联。如果可能,我建议您检查一下您的模型(您的实体之间的关系)。