【问题标题】:Symfony2 Duplicate Entry - but why?Symfony2 重复条目 - 但为什么呢?
【发布时间】: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


【解决方案1】:

@Qoop 所述的关联映射有误。

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

提供的代码表明关联是单向的(User 实体中没有$tasks 字段),因此只需要从 Task 实体进行 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也有类似的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 2021-04-25
    相关资源
    最近更新 更多