【问题标题】:Symfony - The database schema is not valid (sessions)Symfony - 数据库模式无效(会话)
【发布时间】:2020-06-04 18:50:02
【问题描述】:

按照 symfony 文档 https://symfony.com/doc/current/session/database.html 中所述创建 sessions 表后,使用数据库验证控制台命令 console doctrine:schema:validate 时会引发错误

会话行为按预期工作,我没有注意到任何其他问题,但验证错误。即使执行了推荐的sql语句ALTER TABLE sessions CHANGE sess_id sess_id VARCHAR(128) NOT NULL;,验证错误仍然存​​在。

错误输出

Mapping
-------


 [OK] The mapping files are correct.                                                                                    


Database
--------


 [ERROR] The database schema is not in sync with the current mapping file.                                              



 The following SQL statements will be executed:

     ALTER TABLE sessions CHANGE sess_id sess_id VARCHAR(128) NOT NULL;

Error Output (screenshot)

sessions 表的创建方式(如 symfony 文档中所述)

  CREATE TABLE `sessions` (
    `sess_id` VARBINARY(128) NOT NULL PRIMARY KEY,
    `sess_data` BLOB NOT NULL,
    `sess_lifetime` MEDIUMINT NOT NULL,
    `sess_time` INTEGER UNSIGNED NOT NULL
) COLLATE utf8mb4_bin, ENGINE = InnoDB;

【问题讨论】:

  • 似乎很奇怪,数据库不会将 varbinary 更改为 varchar ...当使用 mysql 进行测试时,它会更改列类型..
  • 列类型改变,但验证仍然失败。我已经成功执行了推荐的语句ALTER TABLE sessions CHANGE sess_id sess_id VARCHAR(128) NOT NULL;,并且 sess_id 列是数据库本身的 VARCHAR。调用验证时仍然是同样的错误。
  • 我相信我也有过这个错误,这也是我停止盲目依赖迁移差异命令的时候;o/虽然很烦人。

标签: php mysql symfony session doctrine


【解决方案1】:

您需要根据实体映射来同步您的数据库,您可以使用两种方法:

  1. 迁移数据库(推荐)bin/console doctrine:migration:diff && bin/console doctrine:migration:migrate
  2. 强制更新数据库:bin/console doctrine:schema:update --force

【讨论】:

  • 是的,知道这一点。其他数据库更改不是问题。为此使用学说迁移。只有sessions一直无效。会话表的 db 结构是按照文档中的描述创建的。建议的更改语句是使用doctrine:schema:update --force 命令手动执行的,但每次使用doctrine:schema:validate 命令时仍会弹出
  • 你试过doctrine:cache:clear-metadata命令@StFroyd
  • 感谢 ivan 的提示!我刚刚执行了该操作,但没有成功。 console doctrine:schema:update --dump-sql 仍然显示我手动执行并多次使用 --force 参数的语句。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多