php - 如果属性具有空字符串值,如何使 Doctrine 拒绝实体?

标签 php mysql symfony doctrine

我试图通过 Doctrine 防止空字符串插入 MySQL 数据库,

我这样做了:

 /**
   * @ORM\Column(type="string", length=255)
   * @Assert\NotBlank() ( or NotNull() )
   */
    private $name;

插入空输入后值时我仍然没有错误,

最佳答案

您需要实现 your own custom entity validation . Assert Validator 使用注释组件,但不是由 Doctrine 。

例如,您可以这样做:

/**
 * @Entity
 * @HasLifecycleCallbacks
 */
class Thing
{
    /**
     * @ORM\Column(type="string", length=255, nullable=false)
     */
    private $name;

    /**
     * @PrePersist @PreUpdate
     */
    public function assertNotEmptyName() {
        if(empty($this->name)) { 
            throw new ThingWithNoNameException();
        }
    }
}

在创建或更新 Thing 之前实体assertNotEmptyName()将被调用,如果 name 将抛出异常是空的。

此外,我添加了 nullable=false所以在数据库级别很明显名称不能是null ,以提高数据完整性。

(您还必须从逻辑上定义 ThingWithNoNameException)。

关于php - 如果属性具有空字符串值,如何使 Doctrine 拒绝实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57508360/

相关文章:

php - 比较 MYSQL 中的两个表

mysql - 我们可以多次使用单个光标而不再次打开它吗?

Symfony2 UniqueConstraint 和 UniqueEntity(违反完整性)

sql - 从表中选择一个字段具有相同值的行

php - Symfony/Doctrine/MongoDB 获取每 N 个项目

php - 在 Twig 中设置默认的原始过滤器

php - 检查 MySQL 上是否存在表

php - 检索用户上传的视频规范

php - Laravel 获取发送到请求的数据

php - 来自 MySQL 的路径报告