symfony 3原理schema_filter不起作用



我已经在数据库和相应的实体上创建了视图。一切似乎都很好,但每当我运行时

php-bin/console原则:模式:验证

它会告诉我映射很好,但不是数据库,如下所示:

[数据库]失败-数据库架构与当前映射文件不同步。

查找它时,我发现可以将DBAL配置为从验证中筛选出表。

这是我在config.yml上尝试的(请查看下面代码的最后一行)。其目的是将名称以"view"开头的表排除在验证之外。

doctrine:
dbal:
default_connection: default
connections:
default:      
driver: pdo_mysql
host: '%database_host%'
port: '%database_port%'
dbname: '%database_name%'
user: '%database_user%'
password: '%database_password%'
charset: utf8mb4
default_table_options:
charset: utf8mb4
collate: utf8mb4_unicode_ci
schema_filter: ~^(?!view_)~

因此,根据本文档的schema_filter应该过滤掉它,但它没有。

我检查了一些其他问题,包括这个

有什么想法吗?感谢

消息告诉您,您的映射与数据库模式不同,您必须更新数据库方案。对于Symfony3,命令为

php bin/console doctrine:schema:update --force

实际上,这个命令非常强大。它比较了数据库应该看起来像(基于实体),并执行SQL语句需要将数据库模式更新到应该是的位置

您也可以使用

php bin/console doctrine:schema:update --dump-sql

要查看SQL,您需要运行,但不需要更改数据库方案。

当你运行

php bin/console doctrine:schema:validate

Doctrine会检查你的地图文件,对你来说没问题。之后将检查您的架构。在那一刻,你的参数schema_filter告诉Doctrine忽略数据库中名称以view开头的所有表,但在你的映射文件中存在表名为view的实体并且为此你得到错误

[数据库]失败-数据库架构与当前映射文件不同步。

因此schema_filter用于告诉Doctrine忽略数据库中的表,而不是忽略实体。

要查看何时使用schema_filter,请想象这样的情况:您需要数据库中名称以custom_开头的自定义表,在您的文件中,您没有与这些表映射的实体,并且如果您调用

php bin/console doctrine:migrations:diff

这将删除所有自定义表,除非您在配置文件中告诉Doctrine忽略自定义表,并且如果设置了参数,则可以这样做

schema_filter: ~^(?!custom_)~

请查看条令文件

相关内容

  • 没有找到相关文章

最新更新