当安装包而不是单个学说依赖项时,如何更新 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?

将学说实体布尔字段设置为 0 而不是 null

添加依赖项时如何自动更新主解决方案?

在使用 github 操作进行构建期间执行诗歌安装时,使用预编译的 numpy 包而不是构建它

如何让 Symfony 2 与学说 ORM 只保留一次相关实体