条令和Symfony2-完整性约束冲突:密钥“主”的1062个重复条目“x-y”

条令和Symfony2-完整性约束冲突:密钥“主”的1062个重复条目“x-y”,symfony,doctrine,fixture,Symfony,Doctrine,Fixture,我正在使用Doctrine在Symfony2中创建一些装置。我得到以下错误: 当我试图坚持多对多单向关联时。 我理解这个错误,但我感到困惑:在多对多关系中,某些ID是否明显重复? 如果我错了,请纠正我。我把我的代码放在下面,欢迎任何澄清 夹具文件: 在尝试创建关联之前,将创建实体学生和课程,还将创建装置。 如果我尝试在每门课程中只插入一名学生,那么一切都会顺利进行。我看到您的课程实体已经存在,因为您直接从数据库$courses=$em->createQuery'SELECT c from soc

我正在使用Doctrine在Symfony2中创建一些装置。我得到以下错误:

当我试图坚持多对多单向关联时。 我理解这个错误,但我感到困惑:在多对多关系中,某些ID是否明显重复? 如果我错了,请纠正我。我把我的代码放在下面,欢迎任何澄清

夹具文件:

在尝试创建关联之前,将创建实体学生和课程,还将创建装置。
如果我尝试在每门课程中只插入一名学生,那么一切都会顺利进行。

我看到您的课程实体已经存在,因为您直接从数据库$courses=$em->createQuery'SELECT c from sociaLecompsSuperBundle:coursec'->getResult;。因此,您不应该再次尝试持久化实体。我建议您使用以下方式合并:

$em->merge$课程; 注1: 我看到你在这里使用了条令装置,学生和课程已经创建。如果它们是通过一个原则夹具创建的,那么就考虑使用AddioRoad和GET引用方法。示例如下:


注2:另外,您没有在您订阅的学生协会中设置级联选项。既然学生已经存在,就不应该成为问题。否则,您可以设置cascade选项,也可以在学生实体上运行merge | persist。

这是最愚蠢的事情。 我替换了:

$s = array($students[$i], $students[$i++]);

由于这是一个post增量,第二次插入尝试将同一个学生放入数据库,结果是一个精确的行重复


希望这对某人有所帮助。

。谢谢你的提示^^
namespace sociaLecomps\SuperBundle\DataFixtures\ORM;

use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\ORM\Query;

use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;


class LoadAssociationsData extends AbstractFixture implements OrderedFixtureInterface, ContainerAwareInterface
{
    private $container;

    public function setContainer(ContainerInterface $container = null){
        $this->container = $container;
    }

    public function load(ObjectManager $manager)
    {
        $em = $this->container->get('doctrine')->getManager('default');

        /*
         * COURSE - STUDENT ASSOCIATION
         */

        $courses = $em->createQuery('SELECT c FROM sociaLecompsSuperBundle:Course c')->getResult();
        $students = $em->createQuery('SELECT s FROM sociaLecompsSuperBundle:Student s')->getResult();

        $i=0;
        for($j=0; $j<count($courses); $j++){

            $course = $courses[$j];

            //here I'm adding two different students to the same course
            $s = array($students[$i], $students[$i++]);
            $course->setSubscribedStudents($s);
            $em->persist($course);

            $i++;
        }
        $manager->flush();

    }
}
/**
     * @ORM\ManyToMany(targetEntity="Student")
     * @ORM\JoinTable(name="relation_course_student",
     *      joinColumns={@ORM\JoinColumn(name="course_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="student_id", referencedColumnName="id")}
     *      )
     **/
    private $subscribed_students;

    public function __construct() {
        $this->subscribed_students = new ArrayCollection();
    }
$s = array($students[$i], $students[$i++]);
$s = array($students[$i], $students[++$i]);