【发布时间】:2020-09-22 12:14:26
【问题描述】:
自从上个月我的服务器上一次更新以来,我在 Doctrine 遇到了一个不寻常的问题。
当我运行 doctrine:schema:update --force 时,我的结果是“执行了 54 个查询”。即使我不更改我的实体也会发生相同的结果。
当我运行doctrine:schema:update --dump-sql 查看查询时,我可以看到相同的查询正在运行。例如:
ALTER TABLE artisan CHANGE creator_id creator_id INT DEFAULT NULL;
ALTER TABLE user_connection CHANGE date date DATETIME DEFAULT NULL;
ALTER TABLE device CHANGE device_type device_type VARCHAR(500) DEFAULT 'ios' NOT NULL;
问题在于列的类型与查询更改的类型相同。不知道 Doctrine 为什么要改类型。
MariaDB 版本是 10.4.13 - Doctrine 版本是 2.5.14 - Symfony 版本是 2.8.42
实体示例:
设备:device_type
/**
* @var string
*
* @ORM\Column(name="device_type", type="string", length=500, options={ "default":"ios" })
*/
private $device_type = "ios";
用户连接:日期
/**
* @var \DateTime
*
* @ORM\Column(name="date", type="datetime", nullable=true)
*/
private $date;
工匠:创造者
/**
* @var User
*
* @ORM\ManyToOne(targetEntity="MiddlewareBundle\Entity\User")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="creator_id", referencedColumnName="id", nullable=true)
* })
*/
private $creator;
【问题讨论】:
-
是否运行“describe table artisan;”提供有关如何定义 creator_id 的任何线索?
-
是的,但是不同的类型会遇到同样的问题。创建者 ID 为:字段类型 Null 键默认额外 - creator_id int(11) YES MUL NULL
-
我记得在 Symfony 2 早期时有时会遇到此类问题。我会通过简单地删除模式然后重新创建它来解决它们。我怀疑你会有一个选择。您的服务器升级大概升级了您的 mysql 版本,这可能是导致问题的原因。您的 Symfony/Doctrine 版本非常旧。抱歉,我无法提供任何灵丹妙药来解决此问题。也许其他人可以。
-
正如您在github.com/doctrine/dbal/releases/tag/v2.7.0 上看到的,在
doctrine/dbal:2.7.0中添加了对MariaDB 的明确支持