如何在doctrine2实体中禁用字符串最大长度的隐式字符串修剪?

时间:2015-08-31 08:53:35

标签: php mysql string doctrine-orm maxlength

使用dontrine2,我有一个具有以下注释属性的实体:

/**
 * @var string
 * @Column(type="string", length=4, nullable=false)
 */
protected $someProperty;

现在,当属性设置为foobar时,字符串将被修剪为前四个字符,即foob,而不是获取异常,然后将其存储到数据库中。

我知道我可以在setter中实现长度检查。然后我会在两个地方配置字符串的长度,我宁愿避免。

我也可以使用验证,但这也会使配置加倍。

我觉得令人困惑的是doctrine2隐式地缩短了字符串,但是当nullable为false时将值设置为null时,我得到了一个异常。这似乎不一致。

我可以禁用剪裁并强制例外吗?或者我是否必须自己验证实体?

1 个答案:

答案 0 :(得分:1)

Doctrine不会对任何字符串截断进行任何验证。您获得的所有异常都来自数据库层。

当您尝试将空值插入到不允许为空的列时,数据库查询将失败。

当您尝试插入的字符串值长于列定义中定义的长度时,MySql会自动截断它。您可以更改此行为,将MySql配置为使用STRICT模式。