【问题标题】:symfony2 / doctrine 2 / Mysql : null values saved as empty stringssymfony2 / 教义 2 / Mysql :空值保存为空字符串
【发布时间】:2015-04-26 18:53:29
【问题描述】:

我有一个基本的 symfony2 表单,我可以在其中为我的字段设置一个值。

我刚刚发现空值保存为空字符串,我预计会引发异常,因为不接受空值。

我的映射(在一个特征内):

/**
 * @ORM\Column(name="name", type="string", length=100, nullable=false)
 */
protected $name;

我的领域:

        ->add('name', null, array(
                'label'=>'Nom détaillé',
                'required' => false))

将 required 设置为 true 并定义断言规则效果很好,但我正在尝试解决此转换问题。

如果我在 SetName 方法中放置一个 vardumpin,我会得到一个空值,该值稍后会在我的数据库中保存为空字符串。我该如何解决?

编辑:节目创建表 t

CREATE TABLE `recipe` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `isProduct` tinyint(1) NOT NULL,
 `portions` int(11) DEFAULT NULL,
 `nickname` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
 `shortDescription` varchar(500) COLLATE utf8_unicode_ci DEFAULT NULL,
 `weight` decimal(10,2) DEFAULT NULL,
 `isPrivate` tinyint(1) NOT NULL,
 `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
 `slug` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
 `content` longtext COLLATE utf8_unicode_ci,
 `createdAt` datetime NOT NULL,
 `updatedAt` datetime NOT NULL,
 `viewCount` int(11) NOT NULL,
 `parentId` int(10) unsigned DEFAULT NULL,
 `userId` int(10) unsigned DEFAULT NULL,
 `createdBy` int(10) unsigned DEFAULT NULL,
 `updatedBy` int(10) unsigned DEFAULT NULL,
 PRIMARY KEY (`id`),
 KEY `IDX_DD24B40110EE4CEE` (`parentId`),
 KEY `IDX_DD24B40164B64DCC` (`userId`),
 KEY `IDX_DD24B401D3564642` (`createdBy`),
 KEY `IDX_DD24B401E8DE7170` (`updatedBy`),
 CONSTRAINT `FK_DD24B40110EE4CEE` FOREIGN KEY (`parentId`) REFERENCES `recipe` (`id`) ON DELETE SET NULL,
 CONSTRAINT `FK_DD24B40164B64DCC` FOREIGN KEY (`userId`) REFERENCES `user` (`id`),
 CONSTRAINT `FK_DD24B401D3564642` FOREIGN KEY (`createdBy`) REFERENCES `user` (`id`) ON DELETE SET NULL,
 CONSTRAINT `FK_DD24B401E8DE7170` FOREIGN KEY (`updatedBy`) REFERENCES `user` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

【问题讨论】:

  • 这很清楚。该字段不是可为空的文本,因此 null 转换为空字符串。
  • 默认值是多少?你能发布show create table t 的输出吗?
  • 嗯,这是通常的行为吗?我不应该收到例外吗?或者我怎么能让它抛出异常?
  • 您可以使用 Doctrine 事件挂钩和生命周期回调来进行此类错误检查。在此处阅读更多信息doctrine-orm.readthedocs.org/en/latest/reference/events.html
  • 或者更确切地说是验证器,如果它是一个表单字段。

标签: php mysql symfony doctrine-orm


【解决方案1】:

似乎您只需要针对变量添加严格的等价检查===,然后添加throw new Exception()(如果它为空)

【讨论】:

  • 好吧,我当然可以检查并抛出异常,这不是问题。我更想了解它是否是默认行为(我认为这是注释),如果它是默认行为,我怎样才能让它自动抛出异常而不是自动转换为空字符串
  • 顺便说一句,对于另一个实体使用相同的字段(因为我正在使用特征),当我为 null 时会出现异常。
  • 我明白了。性格是什么样子的?并且两个对象都使用同一血统的特征部分吗?
  • 基本上我认为两个对象的保存方法之间必须存在差异。我们需要找到它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-09
  • 2016-05-16
相关资源
最近更新 更多