我得到以下例外:
使用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;
答案 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;