如何为字符串最大长度禁用 doctrine2 实体中的隐式字符串修剪?
How to disable implicit string trimming in doctrine2 entity for string max length?
使用 dontrine2,我有一个具有 属性 并带有以下注释的实体:
/**
* @var string
* @Column(type="string", length=4, nullable=false)
*/
protected $someProperty;
现在,当 属性 设置为 foobar
时,字符串不会出现异常,而是被修剪为前四个字符,即 foob
,然后将其存储到数据库中.
我知道我可以在 setter 中实施长度检查。然而,我会在两个我宁愿避免的地方配置字符串的长度。
我也可以使用验证,但这也会使配置加倍。
我发现 doctrine2 隐式缩短了字符串令人困惑,但是当 nullable 为 false 时将值设置为 null
时,我得到一个异常。这似乎不一致。
我可以禁用修剪并强制异常吗?还是我必须自己验证实体?
Doctrine 不做任何验证,也不做任何字符串截断。您获得的所有异常都来自数据库层。
当您尝试将空值插入不允许为空的列时,数据库查询失败。
当您尝试插入比列定义中定义的长度更长的字符串值时,MySql 会自动截断它。您可以更改此行为,配置 MySql 以使用严格模式。
使用 dontrine2,我有一个具有 属性 并带有以下注释的实体:
/**
* @var string
* @Column(type="string", length=4, nullable=false)
*/
protected $someProperty;
现在,当 属性 设置为 foobar
时,字符串不会出现异常,而是被修剪为前四个字符,即 foob
,然后将其存储到数据库中.
我知道我可以在 setter 中实施长度检查。然而,我会在两个我宁愿避免的地方配置字符串的长度。
我也可以使用验证,但这也会使配置加倍。
我发现 doctrine2 隐式缩短了字符串令人困惑,但是当 nullable 为 false 时将值设置为 null
时,我得到一个异常。这似乎不一致。
我可以禁用修剪并强制异常吗?还是我必须自己验证实体?
Doctrine 不做任何验证,也不做任何字符串截断。您获得的所有异常都来自数据库层。
当您尝试将空值插入不允许为空的列时,数据库查询失败。
当您尝试插入比列定义中定义的长度更长的字符串值时,MySql 会自动截断它。您可以更改此行为,配置 MySql 以使用严格模式。