具有 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 插入数据库 的相关文章

  • 无法删除数据库 mysql:错误 3664 (HY000)

    我的应用程序中有一个名为X Files 我想要drop它 但每当我运行命令时drop database X Files我收到以下错误 mysql gt drop database X Files ERROR 3664 HY000 Faile
  • 在 MySQL 中插入时检查并防止相似字符串

    简要信息 我有3张桌子 Set id name SetItem set id item id position TempSet id 我有一个函数可以生成新的随机组合Item桌子 基本上 总是在成功生成之后 我在中创建一个新行Set表 获取
  • Doctrine 装置如何覆盖 purger 类?

    From doctrine fixture bundle the console doctrine fixtures load n命令定义如下 https github com doctrine DoctrineFixturesBundle
  • php 检查文件是否存在于外部域中(从子域访问)

    我有一个网站http www reelfilmlocations co uk http www reelfilmlocations co uk 上述网站有一个管理区域 其中上传图像并在 uploads images 目录的子文件夹中创建不同
  • php 邮件特殊字符 utf8

    我有以下脚本 在电子邮件中 主题 Testmail Special Characters Body Hi there this isn t somet
  • 显示一个表中的所有记录以及另一表中的匹配记录

    您好 我有一张下表 其中记录了活动和积分 Activites A ID Site ActivityValue ActivityName 1 site1 7 ActivityName1 2 site1 6 ActivityName2 2 si
  • 将具有值的产品属性添加到 Woocommerce 中的产品

    我正在使用此代码添加自定义属性 attributes array array name gt Size options gt array S L XL XXL position gt 1 visible gt 1 variation gt
  • 如何在php中根据url从mysql获取数据?

    我在 mysql 数据库中有一个页表 其中包含 page name title content author 字段 我想用 php 来获取它http www domain com index php page page name http
  • 数据库级别的别名列名 [MySQL]

    别名 可能是错误的词 因为它是在将列 表名称作为查询中的其他名称引用的上下文中使用的 我感兴趣的是是否有一种方法可以在数据库中为列指定两个名称 如果我要打印这样的表格 它看起来会是这样的 mysql gt SELECT FROM User
  • PHP括号少IF条件不接受多个语句

    我从来都不喜欢控制结构中的括号 直到今天我才意识到它如何只接受括号内的一条语句而不是 if 条件 如果我有多个语句 它会抛出语法错误 这是 PHP 的工作方式还是我的 IDE 有问题 显然错误很明显 但我只是想确保这是正常的 如果您有任何其
  • Python 的 mysqldb 晦涩文档

    Python 模块 mysqldb 中有许多转义函数 我不理解它们的文档 而且我努力查找它们也没有发现任何结果 gt gt gt print mysql escape doc escape obj dict escape any speci
  • 为什么 PHPUnit 将一些右大括号显示为未被覆盖?

    我正在使用 PHPUnit 3 6 7 PHP CodeCoverage 1 1 1 和 Xdebug 2 1 2 当我让 PHPUnit 将代码覆盖率统计信息写入 clover 样式的 XML 文件时 它偶尔会显示一个右花括号 表示测试未
  • Laravel Schema Builder 改变存储引擎

    我正在尝试更改表并将其存储引擎更改为InnoDb 当我跑步时php artisan migrate它完成且没有错误 然而 当我检查 Sequel Pro 中的存储引擎时 没有任何变化 public function up Schema ta
  • 使用数据库进行日志记录

    大多数日志似乎都是纯文本形式 而不是放入 MySQL 其他类型的数据库中 这是否有原因 在我看来 将它们放入数据库将使分析变得非常非常容易 但这会以牺牲速度还是其他什么为代价 我不太关心可移植性 显然你会有数据库连接的文本日志 我能想到两大
  • 如何在之前的 Facebook 身份验证后自动安全地让用户登录?

    用户抱怨他们必须过于频繁地登录 如果身份验证完全基于 Facebook OAuth 那么用户如何在下次访问该页面时自动登录 用户流程示例 用户点击 使用 Facebook 登录 用户通过 Facebook 进行身份验证并被重定向回网站 用户
  • 检查一个类是否是另一个类的子类

    我想在不创建实例的情况下检查一个类是否是另一个类的子类 我有一个类 它接收类名作为参数 作为验证过程的一部分 我想检查它是否属于特定的类系列 以防止安全问题等 有什么好的方法可以做到这一点吗 is subclass of http php
  • 如何将“mysql source”命令与 mysql 变量一起使用?

    我需要从 mysql shell 执行一个基于如下条件的 SQL 文件 mysql gt 源 var 其中 var 包含文件名 这不可能 source是MySQL客户端程序在本地识别并执行的命令 变量存在于服务器上 因此客户端不知道什么 v
  • 退出 PHP 脚本后终止或停止 MySQL 查询

    我在工作中运行一个统计服务器 由于运行的查询量很大 该服务器有时会变得非常慢 我们的营销团队使用它作为主要统计工具 团队中的某些人有时会在脚本结束之前退出脚本 通过关闭浏览器或选项卡 同时 SQL 查询继续执行 当有人关闭或离开 PHP 脚
  • 访问 Magento 购物车和/或结帐中的运费

    请注意 这个问题是关于运费 而不是价格 有一个重要的区别 即运输方式为店主支付的费用是多少 而不是客户支付的费用 The shipping tablerate数据库表包括一个cost字段 该字段填充在Mage Shipping Model
  • 将二进制数据从 C# 上传到 PHP

    我想将文件从 Windows C 应用程序上传到运行 PHP 的 Web 服务器 我知道 WebClient UploadFile 方法 但我希望能够分块上传文件 以便我可以监控进度并能够暂停 恢复 因此 我正在读取文件的一部分并使用 We

随机推荐

  • 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