首页 > 解决方案 > 当安装包而不是单个学说依赖项时,如何更新 orm-pack 的单个包?

问题描述

在 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包?

这是我需要的作曲家 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"
        },

标签: phpsymfonydoctrine-ormcomposer-phpsymfony-flex

解决方案


看起来你是orm-pack在旧版本的 Symfony Flex 下安装的。

如今,当你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

包裹 需要 dbal 版本
教义/教义捆绑 ^2.9.0|^3.0
学说/规则 ^2.13.0
学说/学说迁移捆绑 ^2.11(通过学说迁移)

所以你会注意到只有doctrine-bundle声明为 DBAL 3 做好了准备。通过解压依赖项,你至少可以直接管理它们,这要好得多,但你还不能跳转到 DBAL 3。您将在以后的日期,然后这部分答案将变得过时。


推荐阅读