问题标签 [doctrine-migrations]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 在 Doctrine Migrations Bundle 中映射数据库视图
似乎没有适当的文档来说明如何通过教义迁移包配置和使用数据库视图。
可能无法映射 SQL 语句,这些语句最终会在运行 migrations:diff 和 migrations:migrate 时创建/更新数据库视图(从某处给出的 sql)。
如果一个实体被映射到带有@table(name="view_name") 标记的数据库视图,它最终会导致错误/尝试新表,而不是理解它正在使用的数据库视图。
有解决办法吗?我错过了什么吗?
php - 如何使 Doctrine Migrations 在表名中添加引号?
我想将 Doctrine Migrations 与现有数据库一起使用。此数据库中的表名有一个破折号,例如:calendar-history
我使用doctrine:mapping:import
命令从数据库创建实体,它运行良好。然后我想创建第一个迁移,所以我使用doctrine:migrations:diff
. 然后我遇到了一个问题,因为它会创建不带引号的查询,例如:
ALTER TABLE calendar-history DROP FOREIGN KEY calendar-history_ibfk_2
我试图:
- 在实体定义中添加引号:
@ORM\Table(name="`calendar-history`",
- 添加自定义 QuoteStrategy 类
...并且它仅适用于 down() 方法中的查询。迁移中 up() 方法中的查询仍然没有引号。
有什么帮助吗?
symfony - DoctrineMigrations 与 Bundle 作为 Vendor-Package
我想将数据库表添加到现有捆绑包中。
但目前我无法找到一种方法将其集成到 DoctrineMigration 过程中而无需固定耦合。
我已经安装了 "doctrine/doctrine-migrations-bundle": "^2.2" 但是我收到错误消息:Maximum one migration path can be specified with the 2.x version。
目前我已经用一个命令解决了这个问题,该命令使用 Doctine 创建和更新表。
有没有更聪明的方法?
此致,
安德烈
php - 如何防止教义使用 DEFAULT NULL 创建无用的迁移
我想向那些使用 Mysql + Doctrine ORM + Doctrine 迁移的人提出问题,我有一个关联:
(这里的重点是nullable=true
。有些属性是故意留下的)
- 我愿意
migraions:diff
- 用一块生成迁移sender_id VARCHAR(255) DEFAULT NULL
- 运行迁移
- 然后我再做
diff
一次,预计不会产生新的迁移 - 但不,我看到带有行的新文件
CHANGE sender_id sender_id VARCHAR(255) DEFAULT NULL
这意味着什么都不会改变,但是Mysql 驱动下的学说 dbal 并没有从实体注释中看到 DEFAULT NULL
我试图添加@ORM\Column(options={"default": NULL})
.
这有助于防止DEFAULT NULL
迁移,但在这种情况下,FK 和 Index被删除了。
也尝试添加columnDefinition="VARCHAR(255) DEFAULT NULL"
但也没有工作
你是如何解决这个问题的?
doctrine-orm - Doctrine Migration Bundle:升级到版本 3 后出现更新错误
最近有一个更新到第 3 版的原则迁移,这是作为供应商库升级的一部分,所以我们现在有点被迫遵循;)
我们是这样配置的:
然而,我们得到以下奇怪的迁移错误。
bin/console doctrine:migrations:status
给出这个“一切正常”的输出:
但是如果我们运行bin/console doctrine:migrations:migrate --no-interaction
它会抛出以下错误:
我们的数据库看起来不错,因为我们已将其清除并且所有迁移都是新鲜的。
非常感谢任何帮助!
安德烈亚斯
php - 仅在 Doctrine 中尚未执行迁移时才执行迁移
我有一个特定的问题,在构建我的项目时,只有在尚未迁移时才需要运行迁移。我知道我可以$this->skipIf()
在迁移内部使用,但我想有一些“外部”的方式来做到这一点,而不是在我想像那样运行的每个类中添加代码。
有什么办法吗?国旗什么的?尝试了不同的东西,:execute
但:migrate
没有结果。
symfony - 将 Symfony 4.4 DoctrineMigrationsBundle 从 2 更新到 3 时出现问题
我正在运行 Symfony 4.4.8,我想更新我的项目。所以我跑了:
它确实自动将 DoctrineMigrationsBundle ( https://packagist.org/packages/doctrine/doctrine-migrations-bundle ) 从 2.1.2 更新到 3.0.1。
Composer 最初失败是因为教义迁移.yaml 与 DoctrineMigrationsBundle 3.0.1 不兼容,所以我运行了:
但是:似乎 DoctrineMigrationsBundle v 3 具有完全不同的配置,不再使用“migrations_versions”SQL 表,而是使用新的“doctrine_migrations_versions”表和新的迁移目录('%kernel.project_dir%/migrations' '%kernel.project_dir%/src/Migrations')。
这意味着每次您这样做:
您将进入迁移:
我在https://symfony.com/doc/master/bundles/DoctrineMigrationsBundle/index.html读到,您可以像这样手动在教义迁移.yaml 中设置表名:
但这没有用,因为 v 3 表有一个额外的列“execution_time”,并且在“version”列中添加了一个命名空间(例如“DoctrineMigrations\Version20200702112735.php”)。所以两个表都不兼容。
我在任何地方都找不到有关将 DoctrineMigrationsBundle 从 v2 正确升级到 v3 的任何信息。
我必须说我对此感到惊讶,我认为“作曲家更新”是安全的。显然,如果无法升级,其中一个 symfony 捆绑包并没有自动添加版本限制。
所以我该怎么做?我应该让作曲家再次降级 DoctrineMigrationsBundle 吗?还是有什么方法可以将 DoctrineMigrationsBundle 从 v2 升级到 v3 才能正常工作?
php - 如何为 mysql、mssql 和 sqlite 生成学说迁移?
我想使用教义迁移生成数据库迁移脚本。
我的一个客户有 mysql 数据库,另一个有 mssql,我们在开发环境中使用 sqlite。
如果我使用 生成脚本php artisan doctrine:migrations:diff
,那么它将从这一行开始:
如何以某种方式从我们的实体类中的更改生成迁移脚本,它也可以在 mysql、sqlsrv 和 sqlite 上使用?
symfony - 如何使用 Doctrine ORM 处理 MariaDB 系统版本表?
我有下表:
WITH SYSTEM VERSIONING 子句初始化隐藏的、系统管理 的列
row_start
和row_end
列,以便按行跟踪更改。
相应的实体没有这些由 MariaDB 管理的字段 ( row_start
, )。row_end
例如,当我尝试运行任何学说命令时symfony console doctrine:schema:update
,我收到以下错误:
php - SQLite SQLSTATE[HY000]:一般错误:8 次尝试写入只读数据库
我正在使用 SQLite 连接和教义迁移来进行 PHPUnit 的功能测试。我在setUp
方法中从头开始进行数据库迁移:
然后我可以从数据库中写入/读取。例如:
它有效。即使我使用相同的参数调用两次服务,它也确实有效。在这种情况下,它只需要第一次写:
当我必须测试两个必须同时编写的调用时,问题就来了:
错误来了:
- XXX::test_add_two_different_events_should_add_two_event Doctrine\DBAL\Exception\ReadOnlyException: 使用参数 [xxx, "xxx", 执行'INSERT INTO xxx (xxx, xxx, xxx, xxx) VALUES (?, ?, ?, ?)'时发生异常“xxx”,“xxx”]:
SQLSTATE[HY000]:一般错误:8 次尝试写入只读数据库
xxx/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractSQLiteDriver.php:78 xxx/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php:128 xxx/vendor/doctrine/dbal/lib/ Doctrine/DBAL/Statement.php:178 xxx/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php:281 xxx/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php: 1014 xxx/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php:378 xxx/vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php:356 xxx/vendor/doctrine/orm/lib/Doctrine /ORM/EntityManager.php:235 xxx/DoctrineSession.php:32 xxx/TransactionalApplicationService.php:39 xxx/xxx/test.php:100
我尝试在调用之间更改数据库文件权限,但没有任何变化:
知道错误可能来自哪里吗?在这种情况下,每个服务调用都会调用persist
+ 。flush