Symfony2重复录入 - 但为什么?

时间:2014-07-15 19:25:17

标签: mysql symfony entity duplicates

我得到以下例外:

  

使用params [“efswedfgvswde”,“ewdfweds”,“Normal”执行'INSERT INTO任务(task_title,task_description,task_priority,task_type,user)VALUES(?,?,?,?,?)'时发生异常,14,13]:

     

SQLSTATE [23000]:完整性约束违规:1062密钥'UNIQ_505865978D93D649'的重复条目'13'

这里我将表单类型插入数据库:

$task = new Task();
$form = $this->createForm(new TaskType(), $task);

$form->handleRequest($request);

if($form->isValid()):

        $em = $this->get('doctrine')->getManager();
        $em->persist($task);
        $em->flush();

        return  $this->redirect($this->generateUrl('add_task'));

endif;

这是我的任务实体中的字段USER:

/**
 * @var User
 * @Assert\Type(type="Seotool\MainBundle\Entity\User")
 * @ORM\OneToOne(targetEntity="User")
 * @ORM\JoinColumn(name="user", referencedColumnName="id")
 */
protected $user;

为什么不能在表“任务”中添加2个具有相同字段“user”的值?实际上在我的数据库中有一个用户值= 13的条目。当我在user = 13的数据库中添加另一个条目时,我得到了这个异常。为什么?我没有定义,用户是唯一的?!

来自用户实体的ID:

/**
 * @var integer $id
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id()
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

1 个答案:

答案 0 :(得分:3)

@Qoop声明你有错误的关联映射。

一个用户可以许多任务 - 从用户实体转换为OneToMany关联。
许多任务可能属于一个用户 - 从任务实体转换为ManyToOne关联。

提供的代码表明关联是单向(用户实体中没有$tasks字段)因此只需要 ManyToOne 从任务实体映射。

您的映射应如下所示:

/**
 * @var User
 * @Assert\Type(type="Seotool\MainBundle\Entity\User")
 * @ORM\ManyToOne(targetEntity="User")
 * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
 */
protected $user;

您可以在Doctrine here中了解有关关联的更多信息 StackOverflow here上也有类似的问题。