具有 varchar id 的 Doctrine2 实体不会将 id 插入数据库

2024-01-17

我正在尝试在 ZF2 应用程序中为 Doctrine2 创建实体。 我的实体应该有 id varchar(15),但是当我尝试创建新行时,doctrine2 不会将此 ID 推送到数据库中。

在实体生成的类中我有这个:

 /**
 * Checkpoints
 *
 * @ORM\Table(name="checkpoints", uniqueConstraints{@ORM\UniqueConstraint(name="sort", columns={"sort"})}, indexes={@ORM\Index(name="country", columns={"country"})})
 * @ORM\Entity
 */
  class Checkpoints
  {
     /**
     * @var string
     *
     * @ORM\Column(name="id", type="string", length=15, nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
     private $id;
  // rest of the entity...

我是否需要更改某些内容才能将此 ID 从表单传递到原则刷新中的数据库中?


教义处理@ORM\GeneratedValue(strategy="Identity")每个数据库都不同。对于 MySql,它将插入一个生成的值,也称为AUTO_INCREMENT导致integer作为身份证。请看一下http://docs.doctrine-project.org/en/2.0.x/reference/basic-mapping.html#identifiers-primary-keys http://docs.doctrine-project.org/en/2.0.x/reference/basic-mapping.html#identifiers-primary-keys.

在你的情况下,你不应该使用GeneratedValue注释包括它的策略。所以彻底删除它。如果您想要表单的 ID,您可以在实体中设置一个构造函数,该构造函数将为该实体设置您的 ID。

class Checkpoints {

   public function __constructor($id)
   {
       $this->id = $id;
   }

   /**
     * @var string
     *
     * @ORM\Column(name="id", type="string", length=15, nullable=false)
     * @ORM\Id
     */
     private $id;
  // rest of the entity...
}

请注意,没有提到GeneratedValue注释与GenerateValue(strategy="None").

当然,您可以在创建之后设置 ID,但是该实体的每个实例都需要一个 ID,因此最好强制它通过构造函数进行设置。

所以在你的控制器中你可能会使用这样的东西

if ($form->isValid() {
    $formData = $form->getData();
    $checkpoint = new Checkpoints($formData['id']);
}

正如您提到的,您想设置ID通过您的表格输入。但让我指出,用户可以输入重复的主键。为了捕获它,你必须检查一个对象是否已经存在,在这种情况下我建议使用\DoctrineModule\Validator\NoObjectExists. See https://github.com/doctrine/DoctrineModule/blob/master/docs/validator.md https://github.com/doctrine/DoctrineModule/blob/master/docs/validator.md关于学说验证者。

因此,为了检查是否存在具有 ID 的对象,您可以将此验证器添加到表单的输入过滤器中:

public function getInputFilterSpecification()
{
    $entityManager = $this->serviceManager->get('Doctrine\ORM\EntityManager');

    return array(
        'id' => array(
            'validators' => array(
                array(
                    'name' => 'DoctrineModule\Validator\NoObjectExists',
                    'options' => array(
                        'object_repository' => $entityManager->getRepository('Application\Entity\Checkpoints'),
                        'fields' => 'id'
                    )
                )
            )
        )
    );
}

所以现在我们知道所提供的ID可用于新的Checkpoints entity.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有 varchar id 的 Doctrine2 实体不会将 id 插入数据库 的相关文章

随机推荐

  • AngularJS 中如何进行分页?

    我的内存中有一个包含大约 1000 个项目的数据集 并且正在尝试创建一个寻呼机 这个数据集 但我不确定如何做到这一点 我正在使用自定义过滤器函数来过滤结果 效果很好 但不知何故我需要获取页数 有什么线索吗 Angular UI Bootst
  • 填写groupby中缺失的日期

    想象一下我有一个数据框 如下所示 ID DATE VALUE 1 31 01 2006 5 1 28 02 2006 5 1 31 05 2006 10 1 30 06 2006 11 2 31 01 2006 5 2 31 02 2006
  • 如何在 Aerospike Node.js 客户端中获取主键

    我正在尝试从 Aerospike 获取所有记录以及主键 我尝试使用 client query 功能 如下所示 var query client query aerospikeDBParams dbName testRecords var s
  • 我应该使用什么来代替 OnMouseXXX 事件处理程序?

    我构建了一个小应用程序 在某些对象中使 用 OnMouseDrag 和 OnMouseDown 我认为这将是最好的选择 因为该方法不属于 Update 方法 然而 在编译应用程序时 Unity 表示 游戏脚本或其他自定义代码包含 OnMou
  • %errorlevel% 在循环命令中返回 0

    好的 我已经安装了 Dropbox 但它不符合我的要求 所以我使用 Revo Pro 卸载了它 但是 当我打开任务管理器时 我的计算机中仍然有与其相关的进程在运行 因此我决定进行批处理来查找并删除与其相关的所有文件 echo off cd
  • 如何指示可以使用内联 ASM 参数*指向*的内存?

    考虑以下小函数 void foo int iptr iptr 10 1 asm volatile nop r iptr iptr 10 2 使用海湾合作委员会 这编译为 https godbolt org z A3yVqA foo nop
  • 更快的深度克隆

    有人想要一个允许我按值克隆 Net 对象的框架 类吗 我只对公共读 写属性 即 DataContracts 感兴趣 并且不关心引用是否正确解析 即两次包含相同项目实例的集合 我尝试通过序列化技巧DataContractSerializer
  • R:添加两个具有相同尺寸的数据框

    我有 df1 Type CA AR Total alpha 2 3 5 beta 1 5 6 gamma 6 2 8 delta 8 1 9 我有 df2 Type CA AR Total alpha 3 4 7 beta 2 6 8 ga
  • Vim 的 PHP 调试器:调试命令行脚本

    我的 vim 调试器要求我在浏览器中设置 Xdebug cookie 方法是附加 XDEBUG SESSION START 1 之后我就可以开始调试了 但在 CLI 上调用脚本时我无法设置此 cookie 会话 如何使用 vim 调试命令行
  • Textract:失败,退出代码 127 // windows 10 // pdftotext

    当我尝试运行我的 使用 pyinstaller 部署后 程序来读取和转换 PDF 文件并将其输入到 google 工作表中时 我收到下图所示的错误 但是我似乎无法弄清楚问题是什么 Exception in Tkinter callback
  • 绕过 Angular URL 路由

    如何绕过 Angular 提供的路由 例如 在我的角度路由设置中 我设置了 routeProvider otherwise redirectTo someurl 我希望某个请求 由用户单击 HTML 中的某个链接生成 发送到我的网络服务器
  • NSURLConnection 在 401 状态下重试

    我正在与服务器通信 该服务器验证密码并返回无效密码的 401 错误 以及指定失败尝试次数的 json 正文 每次验证失败时 服务器都会增加该数字 我面临的问题是 当 NSURLConnection 收到 401 响应时 它会启动涉及这些委托
  • 在使用 IE 8 的 Windows 7 上运行 WatiN 时遇到问题

    当我在带有 IE8 的 Windows 7 上运行任何 WatiN 测试时 请注意 所有测试都在带有 IE8 的 Vista 上通过 浏览器显示第一页 但不再继续 几秒后出现以下异常 WatiN Core Exceptions Timeou
  • 在纯 JavaScript 中加载多个 JSON 文件

    我是 JavaScript 新手 我已经了解如何使用 JSON Parse 从 JSON 文件创建对象 现在我需要将多个本地 JSON 加载到数组中 我已经在谷歌上搜索我的问题一段时间了 但我发现的所有内容都与单个 JSON 文件相关 有没
  • 用于 CSV 的基于 Spring Batch Java 的 FileItemWriter

    我有一个包含 ItemWriter 的 Spring Batch 服务 用于将数据写入 CSV 我使用了 Spring Batch 指南给出的示例 https spring io guides gs batch processing htt
  • 在 JavaScript 中将项目推入多维树状结构

    我有一系列对象 它们的情况如下 var obj id 23 name Test1 children id 24 name Test2 children id 25 name Test2 children 每个孩子可以有多个子孩子 所以基本上
  • 如何使用 HEAD 和任何合并工具解决所有冲突

    因此 由于某种原因 我与新的合并修补程序发生了很多冲突 实际 手动 更改的文件没有冲突 所有冲突都在修复过程中未触及的文件中 显然是空格问题 稍后我会尝试解决该问题 但现在我需要合并修补程序并进行部署 如何解决所有冲突以使用 HEAD 版本
  • 在 64 位操作系统中使用 glMultiDrawElements

    我最近从32位环境迁移到64位环境 除了一个问题之外 一切都很顺利 glMultiDrawElements使用一些在 64 位操作系统下不进行一些调整就无法工作的数组 glMultiDrawElements GL LINE LOOP fCo
  • Vavr 对象的序列化器/反序列化器

    您好 我正在尝试将 vavr 添加到我的项目中 现在我正在努力解决 Vavr List 对象的正确序列化问题 下面是我的控制器 import io vavr collection List GetMapping value xxx publ
  • 具有 varchar id 的 Doctrine2 实体不会将 id 插入数据库

    我正在尝试在 ZF2 应用程序中为 Doctrine2 创建实体 我的实体应该有 id varchar 15 但是当我尝试创建新行时 doctrine2 不会将此 ID 推送到数据库中 在实体生成的类中我有这个 Checkpoints OR