如何在 ORM Doctrine2 中手动设置/保留主键

Posted

技术标签:

【中文标题】如何在 ORM Doctrine2 中手动设置/保留主键【英文标题】:how to manually set/persist a primary key in ORM Doctrine2 【发布时间】:2015-06-01 18:57:25 【问题描述】:

在我的表中,主键是 ISBN,所以我需要在表单中添加新书时手动设置它。添加 ISBN 123 的新图书时,数据库中的 ISBN 为空白。

实体:

/**
 * @var string
 *
 * @ORM\Column(name="isbn", type="string", length=45)
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="IDENTITY")
 */
private $isbn;

public function setIsbn($isbn)

    $this->isbn = $isbn;
    return $this;
 

public function getIsbn()

    return $this->isbn;

表格类型:

    $builder
        ->add('isbn')

控制器:

    if ($form->isValid()) 
        $em = $this->getDoctrine()->getManager();
        $em->persist($entity);
        $em->flush();

添加 ISBN 123 的新图书时

这会导致数据库中的 ISBN 为空白(但不为空,如果这很重要)

【问题讨论】:

【参考方案1】:

你不需要@ORM\GeneratedValue(strategy="IDENTITY")注解,它是用来生成ID的,你自己提供。

【讨论】:

【参考方案2】:

您可能需要将标识符策略设置为无,@ORM\GeneratedValue(strategy="None")

【讨论】:

只是一个小小的提醒,它是大写的 NONE:@ORM\GeneratedValue(strategy="NONE")

以上是关于如何在 ORM Doctrine2 中手动设置/保留主键的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法使用doctrine2强制执行唯一列?

如何按 Doctrine2 中没有 @Column 注释的实体的属性进行搜索?

在存储库级别在 Doctrine2 ORM 中实现分页的最佳实践

Doctrine2 ORM 访问多对多连接表

Doctrine2:任意连接和单表继承

zf2 doctrine2如何在实体列中使用tinyint数据类型