当安装包而不是单个学说依赖项时,如何更新 orm-pack 的单个包?
Posted
技术标签:
【中文标题】当安装包而不是单个学说依赖项时,如何更新 orm-pack 的单个包?【英文标题】:How to update individual packages of the orm-pack, when the pack is installed instead of the individual doctrine dependencies? 【发布时间】:2021-10-18 06:16:08 【问题描述】:在 Symfony 5.3 应用程序中,我使用的是 orm-pack
,当使用 composer outdated 检查过时的依赖项时,我看到 doctrine/dbal
有一个新版本,但我无法升级它,因为它是在 ORM 包中定义的。
$ > composer outdated
Color legend:
- patch or minor release available - update recommended
- major release available - update possible
doctrine/dbal 2.13.2 3.1.1 Powerful php database abstraction layer (DBAL) with many features for database schema introspection and management.
有什么办法可以使用orm包的新包版本吗?
这是我需要的 composer JSON 文件的一部分:
"require":
"php": "^8.0.09",
"ext-ctype": "*",
"ext-iconv": "*",
"ext-json": "*",
"friendsofsymfony/rest-bundle": "^3.0",
"jms/serializer-bundle": "^3.10",
"nelmio/api-doc-bundle": "^4.4",
"symfony/console": "5.3.*",
"symfony/flex": "^1.3.1",
"symfony/framework-bundle": "5.3.*",
"symfony/http-kernel": "5.3.*",
"symfony/messenger": "5.3.*",
"symfony/monolog-bundle": "^3.5",
"symfony/orm-pack": "^2.1",
"symfony/property-info": "5.3.*",
"symfony/runtime": "5.3.*",
"symfony/translation": "5.3.*",
"symfony/validator": "5.3.*",
"symfony/yaml": "5.3.*"
,
"require-dev":
"behat/mink": "dev-master",
"friends-of-behat/mink-browserkit-driver": "^1.5",
"friends-of-behat/mink-extension": "2.5",
"friends-of-behat/symfony-extension": "^2.0",
"phpstan/extension-installer": "^1.1",
"phpstan/phpstan": "^0.12.94",
"phpstan/phpstan-doctrine": "^0.12.42",
"phpstan/phpstan-phpunit": "^0.12.21",
"phpunit/phpunit": "^9"
,
【问题讨论】:
简短回答是否定的。 Doctrine ORM 还没有在 DBAL 3 下运行。只需要耐心等待 ORM 3 发布和一切更新。 DBAL 3 出现的原因是您可以在不使用 ORM(或 Symfony Doctrine 包)的情况下使用该库。请注意,即使使用全新的 5.3 安装,您仍然会收到相同的黄色版本通知。 【参考方案1】:看起来你在旧版本的 Symfony Flex 下安装了 orm-pack
。
现在,当你 require
一个包时,你会得到这样的东西:
[...]
Unpacked symfony/profiler-pack dependencies
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 0 installs, 0 updates, 1 removal
- Removing symfony/profiler-pack (v1.0.5)
现在 Flex 会自动将包“解包”到包提供的不同依赖项中,因此您可以直接管理它们。
既然这没有发生在你身上,现在你需要:
确保您拥有当前版本的 Symfony Flex(例如 1.13.4,截至目前的最新版本)。
通过运行“解包”包:
composer unpack orm-pack
这将删除 orm-pack
依赖项,并将其替换为包提供的依赖项。完成后,您将能够独立管理依赖项,因为它们将列在您的 composer.json
文件中,而不是 symfony/orm-pack
。
关于doctrine/dbal
的具体情况,截至今日:
请注意,doctrine/dbal
在任何情况下都不会是您项目的直接依赖项,而是orm-pack
提供的包的依赖项。由于其中一些依赖项仍锁定到版本 ^2,因此您暂时无法更新到 3。
例如,orm-pack
提供的软件包:
Package | dbal versions required |
---|---|
doctrine/doctrine-bundle | ^2.9.0|^3.0 |
doctrine/orm | ^2.13.0 |
doctrine/doctrine-migrations-bundle | ^2.11 (via doctrine-migrations) |
所以您会注意到只有 doctrine-bundle
声明已为 DBAL 3 做好准备。解压依赖项后,您至少可以直接管理它们,这要好得多,但您将无法跳转到 DBAL 3 还。您将在以后的日期,然后这部分答案将变得过时。
【讨论】:
【参考方案2】:doctrine/dbal
v3 尚未准备好大量软件包。例如,symfony/orm-pack
需要 doctrine/migrations
(在任何版本中),并且当前没有与新 DBAL 分支兼容的doctrine/migrations
版本。
所以:即使你解压了 ORM 包,你仍然无法将 DBAL 升级到 v3。
【讨论】:
我明白了,所以在使用 migratios 时无法更新此软件包。这真是让人头疼,因为我们的管道中有作曲家过时的检查 该检查在“我可以升级软件包”方面肯定很有趣,但它可能不应该阻塞管道? Composer 有两类依赖通知。红色依赖项是应该安装的依赖项。黄色依赖项是可用但不需要安装的升级。 DBAL 3 是黄色依赖项。您的管道检查应配置为忽略黄色依赖项。以上是关于当安装包而不是单个学说依赖项时,如何更新 orm-pack 的单个包?的主要内容,如果未能解决你的问题,请参考以下文章
composer update - 更新单个包时如何跳过更新依赖项
如何在学说 ORM Symfony 4.1 中使用 array_agg?