当我运行学说模式更新时,我收到了需要执行的奇怪查询,但它们基本上只是重做已经完成或尚未完成的操作?
php app/console doctrine:schema:update --dump-sql
DROP INDEX idx_26d7e8feab772a3c ON notify;
CREATE INDEX IDX_217BEDC8AB772A3C ON notify (notifyUser_id);
DROP INDEX idx_26d7e8fea76ed395 ON notify;
CREATE INDEX IDX_217BEDC8A76ED395 ON notify (user_id);
DROP INDEX idx_26d7e8fe6bf700bd ON notify;
CREATE INDEX IDX_217BEDC86BF700BD ON notify (status_id);
"require": {
"php": ">=5.3.3",
"symfony/symfony": "~2.5.3",
"doctrine/orm": "~2.2,>=2.2.3",
"doctrine/doctrine-bundle": "~1.2",
"gedmo/doctrine-extensions": "2.3.*@dev",
"stof/doctrine-extensions-bundle": "~1.1@dev",
},
此行为阻止我使用 --force 更新学说模式,因为存在外键,并且我收到此错误:
[PDOException]
SQLSTATE[HY000]: General error: 1553 Cannot drop index 'IDX_A37CA197A76ED395': neede
d in a foreign key constraint
这可能是在过去更新数据库相关供应商之后开始发生的,但直到现在我才注意到。
@theapprenticecoder @Trki 这个问题可以通过命令解决
$ app/console doctrine:schema:update --force --complete
这是最好的解决方案。
我可以向您确认,这可能是在您升级教义供应商时发生的。
这个问题已在doctrine/dbal 2.5.1版本中修复。
您需要做的就是安装 v2.5.1 的doctrine/dbal 依赖项。 然后只需执行“php app/console 学说:schema:update --force”,您的问题就会得到解决...
我知道这是一个老问题,但没有一个答案对我有帮助。在Github上
@binarious
的评论中找到了解决方案:https://github.com/doctrine/dbal/issues/3419#issuecomment-709296661
我在 DBAL 4.0.x 和 Doctrine 3.2.x(使用 Symfony 7 框架)中得到相同的行为:运行
bin/console doctrine:schema:update --force
时,它总是更新我的数据库,即使在此期间没有任何更改。
原因: 如果您的班级有一个索引,该索引使用带有
type: Types::TEXT
的列,您很可能会遇到同样的问题。
这是一个“错误”的类:
<?php
// ...
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity]
#[ORM\Index(name: 'name_de', columns: ['name_de'])]
class InformationSource
{
// ,------------- problem
// /
// v
#[ORM\Column(type: Types::TEXT)]
public string $nameDe;
// ...
}
为索引中使用的每一列设置固定长度。 Doctrine 会识别它,并且一旦正确创建索引就不会尝试重新创建索引。
<?php
// ...
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity]
#[ORM\Index(name: 'name_de', columns: ['name_de'])]
class InformationSource
{
// ,------------- fixed
// /
// v
#[ORM\Column(length: 255)]
public string $nameDe;
// ...
}