tanoconsulting/datavalidatorbundle

一个用于验证存储在数据库和文件系统中的数据工具

资助包维护!
tanoconsulting

安装: 208

依赖者: 1

建议者: 0

安全: 0

星级: 0

关注者: 2

分支: 0

开放问题: 0

类型:symfony-bundle

1.0.0-BETA1 2021-05-03 10:59 UTC

This package is auto-updated.

Last update: 2024-09-10 22:39:46 UTC


README

目标

允许检查数据库中数据的完整性,超出数据库模式定义所强制的内容。

允许检查一组文件的完整性(WIP)。

用例

有许多场景,在数据库模式中配置的约束不足以强制数据完整性,例如:

  • 使用的数据库引擎不支持高级/复杂的数据验证约束
  • 使用的数据库引擎支持高级数据验证约束,但未使用
  • 使用数据库引擎难以表达的数据完整性约束过于复杂
  • 在大量导入操作期间,禁用了本地约束以提高速度
  • 在多个应用程序写入数据库的情况下,在应用程序代码中实现约束

在所有这些情况下,一个单独的工具可以验证数据库中存储的数据是否符合一系列规则,这将非常有用。

要求

  • php 7.3 或更高版本
  • 由 Doctrine DBAL 支持的数据库(2.11 或 3.0 或更高版本)
  • Symfony 组件:请参阅 composer.json

快速开始

  1. 可以在 yaml 或 json 文件中定义约束集。以下示例使用 yaml 显示支持的语法

    constraints:
      -
        ForeignKey:
          child:
            ezapprove_items: collaboration_id
          parent:
            ezcollab_item: id
      -
        ForeignKey:
          child:
            ezbinaryfile: [contentobject_attribute_id, version]
          parent:
            ezcontentobject_attribute: [id, version]
       -
        ForeignKey:
          child:
            ezcontentobject: id
          parent:
            ezcontentobject_version: contentobject_id
          except: 'ezcontentobject.status = 1 AND ezcontentobject_version.status = 1'
      -
        Query:
          name: classes_with_same_identifier
          sql: 'SELECT identifier, COUNT(*) AS identical_identifiers FROM ezcontentclass WHERE version = 0 GROUP BY identifier HAVING COUNT(*) > 1'
          # skip the validation of this constraint in a silent manner if the table is missing by using the line below:
          requires: {table: ezcontentclass}
  2. 运行验证命令

     php bin/console datavalidator:validate:database --config-file=<my_schema_constraints.yaml>
    

    这假设您的应用程序已设置一个名为 doctrine 的数据库连接配置。如果不是这种情况,您可以运行

     php bin/console datavalidator:validate:database --config-file=<my_schema_constraints.yaml> --database=<mysql://user:pwd@localhost/mydb>
    

    如果您想列出验证约束而不验证它们,请运行

     php bin/console datavalidator:validate:database --config-file=<my_schema_constraints.yaml> --dry-run
    

    默认情况下,结果显示违反每个约束的数据库行数。要查看这些行的数据,请使用

     php bin/console datavalidator:validate:database --config-file=<my_schema_constraints.yaml> --display-data
    

当前支持的约束

  • 外键定义
  • 自定义 SQL 查询

请参阅 doc/samples 文件夹中的知名应用程序数据库模式约束示例。

更高级的使用

在代码中定义验证约束

您可以通过设置配置参数 data_validator.constraints.database 的值或使用 data_validator.constraint_provider.database 标签来标记服务,而不是在命令行上使用专用配置文件来配置验证约束。那些服务必须实现一个公开方法 getConstraintDefinitions(),它返回所有相关的约束定义

  • 通过设置配置参数 data_validator.constraints.database
  • 通过标记服务为 data_validator.constraint_provider.database

创建您自己的约束类型

WIP

故障排除

  • 使用 -v 命令行选项查看执行详情

  • 如果约束验证的执行时间过长,您可以使用 CTRL-C 在中途停止执行:脚本将以优雅的方式退出,并打印出在该点之前找到的任何违规行为

  • 为了避免在“调试模式”下运行 Symfony 时由于大查询而造成的内存使用过多,请将 --no-debug 选项添加到您的命令中。如果可能,请使用非调试的 Symfony 环境。

  • 如果您仍然收到“允许的内存大小”致命错误,请使用 php -d memory_limit=-1 运行命令。

常见问题解答

  • 问:我可以在控制器或事件中运行验证而不是 cli 命令吗?答:技术上可以,但通常不推荐,因为用于验证整个数据集的数据库查询可能需要很长时间才能执行。

感谢

基于 Symfony/Validator 组件的代码;感谢所有开发者!

License Latest Stable Version Total Downloads