仅发现doctrine:schema:validate
会引发错误:
[错误]数据库模式与当前映射文件不同步。
所以我尝试doctrine:schema:update --force --complete --dump-sql
成功:
将执行以下SQL语句:
ALTER TABLE user CHANGE last_login `last_login` DATETIME DEFAULT NULL;
正在更新数据库架构...
1 query was executed
[确定]数据库架构已成功更新!
但是,如果我再次运行doctrine:schema:validate
,则会出现与模式不同步有关的相同错误。
我检查了数据库表字段定义,它看起来不错:
`last_login` datetime DEFAULT NULL
这是定义列的方式:
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $last_login;
我发现了这个:https://github.com/doctrine/dbal/pull/2825
有什么想法吗?
答案 0 :(得分:1)
在config.yml
或doctrine.yaml
(取决于Symfony的版本)中,设置数据库服务器的正确服务器版本。例如:
doctrine:
# …
dbal:
# …
server_version: mariadb-10.2.15
请注意mariadb
前缀。
答案 1 :(得分:0)
当试图从MariaDB安装中导出服务器版本时,Doctrine似乎无法确定正确的MySQL API版本。
在配置中定义MySQL版本号可能会有所帮助。它在几个项目中为我做到了在Debian Stretch上使用MariaDB时。
# app/config/config.yml
doctrine:
# …
dbal:
# …
server_version: 5.7
这将导致Doctrine跳过自动检测MySQL版本并使用最新的API。
答案 2 :(得分:0)
我更改了 .env.local 中的 DATABASE_URL 并且它起作用了。 之前(没用)
DATABASE_URL=mysql://root:password@127.0.0.1:3306/db?serverVersion=10.4.12
之后(最终工作)
DATABASE_URL=mysql://root:password@127.0.0.1:3306/db?serverVersion=mariadb-10.4.12