我已经在数据库和相应的实体上创建了视图。一切似乎都很好,但每当我运行时
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_)~
请查看条令文件