【发布时间】:2014-07-16 18:56:41
【问题描述】:
我得到以下异常:
使用参数 ["efswedfgvswde"、"ewdfweds"、"Normal" 执行“INSERT INTO tasks (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;
为什么不能在“任务”表中添加两个具有相同字段“用户”值的条目?实际上在我的数据库中有一个用户值为 13 的条目。当我在我的数据库中添加另一个用户 = 13 的条目时,我得到了这个异常。为什么?我没有定义,那个用户是唯一的?!
这是来自用户实体的 ID:
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id()
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
【问题讨论】:
-
您似乎想要 oneToMany 而不是 oneToOne。 OneToOne 意味着每个对象只能连接到另一个对象中的一个,当您尝试将 2 个(或更多)任务连接到 1 个用户时。
-
现在我完全糊涂了...我收到一个又一个错误... -.-
-
当我有 2 个任务 - 任务 ID 1 和任务 ID 2。任务 ID 1 有用户 ID 1 但任务 ID 1 也有用户 ID 2。任务 ID 2 只有用户 ID 2。我想要现在在用户完成任务时添加到 TaskDone 中。所以我添加了 TaskDone -> id 1 |任务 ID 1 |用户 ID 1 |和 id 2 |任务 ID 1 |用户标识 2 。因此,用户的每项任务都可以设置为已完成。这就是 OnetoOne 吗?或多对多或单对多或多对一?
标签: mysql symfony entity duplicates