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

标签 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 时,我会收到异常。这看起来不一致。

我可以禁用修剪并强制异常(exception)吗?或者我必须自己验证该实体吗?

最佳答案

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

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

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

关于php - 如何在doctrine2实体中禁用字符串最大长度的隐式字符串修剪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32307369/

相关文章:

php - 试图显示数据库表中的每一行,但只显示第一行

php - 日期选择器显示日期,例如 2012 年 2 月 9 日星期四

php - 单选按钮值,仅发送一个表单参数

mysql - 数据库搜索并按相关性显示结果

C++ - include <string> 错误

c - 如何使用连接两个动态字符串生成的字符串动态引用数组?

php - 无法可靠地确定 MacBook 服务器的完全限定域名

php - 使用 TCPDF 生成的 UTF-8 PDF 在 Adob​​e Acrobat 中显示良好,但在 Illustrator 和 Google 预览中损坏

sql - 在与 WHERE 共享的计算上优化 MySQL ORDER BY

string - Scala StringLike split 方法为前导空格创建额外的双引号