doctrine/annotations required for Doctrine Console Tools #6921

Closed
opened 2026-01-22 15:41:21 +01:00 by admin · 7 comments
Owner

Originally created by @llaville on GitHub (Jan 31, 2022).

Bug Report

Q A
BC Break yes
Version 2.11.x

Summary

doctrine/annotations is required when trying to create the schema with Doctrine Console Tools

This issue is a try to clarify what @remicollet tried to explain in report #9416 (/cc @derrabus)

Found myself the same problem in my project bartlett/php-compatinfo

Current behavior

Fatal error: Uncaught Error: Class 'Doctrine\Common\Annotations\AnnotationRegistry' not found was raised when running the Doctrine Console Tools vendor/bin/doctrine

How to reproduce

Begin with a very simple composer.json contents :

{
    "minimum-stability": "stable",
    "require": {
        "doctrine/orm": "^2.11"
    }
}

On a PHP 7.4.27 platform
Today, when I install the dependencies (composer update), I got (composer show):

doctrine/cache                   2.1.1   PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redi...
doctrine/collections             1.6.8   PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.
doctrine/common                  3.2.1   PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects d...
doctrine/dbal                    3.3.1   Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and manage...
doctrine/deprecations            v0.5.3  A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecat...
doctrine/event-manager           1.1.1   The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine pr...
doctrine/inflector               2.0.4   PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase...
doctrine/instantiator            1.4.0   A small, lightweight utility to instantiate objects in PHP without invoking their constructors
doctrine/lexer                   1.2.2   PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.
doctrine/orm                     2.11.1  Object-Relational-Mapper for PHP
doctrine/persistence             2.3.0   The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine o...
psr/cache                        1.0.1   Common interface for caching libraries
psr/container                    1.1.2   Common Container Interface (PHP FIG PSR-11)
psr/log                          1.1.4   Common interface for logging libraries
symfony/console                  v5.4.3  Eases the creation of beautiful and testable command line interfaces
symfony/deprecation-contracts    v2.5.0  A generic function and convention to trigger deprecation notices
symfony/polyfill-ctype           v1.24.0 Symfony polyfill for ctype functions
symfony/polyfill-intl-grapheme   v1.24.0 Symfony polyfill for intl's grapheme_* functions
symfony/polyfill-intl-normalizer v1.24.0 Symfony polyfill for intl's Normalizer class and related functions
symfony/polyfill-mbstring        v1.24.0 Symfony polyfill for the Mbstring extension
symfony/polyfill-php72           v1.24.0 Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions
symfony/polyfill-php73           v1.24.0 Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions
symfony/polyfill-php80           v1.24.0 Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions
symfony/service-contracts        v2.5.0  Generic abstractions related to writing services
symfony/string                   v5.4.3  Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a ...

We may notice that doctrine/annotations package is not installed, but it's used by doctrine/orm:
See https://github.com/doctrine/orm/blob/2.11.x/lib/Doctrine/ORM/Configuration.php#L10

Following documentation : https://www.doctrine-project.org/projects/doctrine-orm/en/2.11/reference/tools.html

I create a config/cli-config.php file with following contents

<?php

use Doctrine\ORM\Tools\Console\ConsoleRunner;

// replace with file to your own project bootstrap
require_once 'bootstrap.php';

// replace with mechanism to retrieve EntityManager in your app
$entityManager = GetEntityManager();

return ConsoleRunner::createHelperSet($entityManager);

And I also create a bootstrap.php file with following contents

<?php

use Doctrine\Common\Proxy\AbstractProxyFactory;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\Tools\Setup;

function GetEntityManager(): EntityManagerInterface
{
    $factory = null;

    $targetFile = 'database.sqlite';
    $dbUrl = sprintf('sqlite:///$PWD/%s', $targetFile);

    $connection = ['url' => $dbUrl];
    $isDevMode = true;
    $cache = null;

    $proxyDir = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'cache';


    $paths = [implode(DIRECTORY_SEPARATOR, [__DIR__, 'Entity'])];
    $config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode, $proxyDir, $cache);
    if ($isDevMode) {
        // suggested for DEV mode: see Doctrine ORM documentation
        // at https://www.doctrine-project.org/projects/doctrine-orm/en/2.8/reference/advanced-configuration.html#auto-generating-proxy-classes-optional
        $config->setAutogenerateProxyClasses(AbstractProxyFactory::AUTOGENERATE_ALWAYS);
    } else {
        // lazy generation on PROD or TEST modes (i.e: CI)
        $config->setAutogenerateProxyClasses(AbstractProxyFactory::AUTOGENERATE_FILE_NOT_EXISTS);
    }

    return EntityManager::create($connection, $config);
}

The Use Case Project structure look like :

.
├── cache
├── composer.json
├── composer.lock
├── config
│   ├── bootstrap.php
│   └── cli-config.php
├── Entity
└── vendor
    ├── autoload.php
    ├── bin
    ├── composer
    ├── doctrine
    ├── psr
    └── symfony

At first run attempt, we got following error :

nfigure caches without doctrine/cache 1.11 or symfony/cache. Please add an explicit dependency to either library. in /shared/backups/github/my-sandboxes/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Setup.php:193

So I added "symfony/cache": "^5.4" constraint in my composer.json file. Update it and run once again to get final error

Fatal error: Uncaught Error: Class 'Doctrine\Common\Annotations\AnnotationRegistry' not found in /shared/backups/github/my-sandboxes/vendor/doctrine/orm/lib/Doctrine/ORM/Configuration.php:165
Stack trace:
#0 /shared/backups/github/my-sandboxes/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Setup.php(75): Doctrine\ORM\Configuration->newDefaultAnnotationDriver(Array, true)
#1 /shared/backups/github/my-sandboxes/config/bootstrap.php(25): Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration(Array, true, '/shared/backups...', NULL)
#2 /shared/backups/github/my-sandboxes/config/cli-config.php(9): GetEntityManager()
#3 /shared/backups/github/my-sandboxes/vendor/doctrine/orm/bin/doctrine.php(41): require('/shared/backups...')
#4 /shared/backups/github/my-sandboxes/vendor/doctrine/orm/bin/doctrine(4): include('/shared/backups...')
#5 {main}
  thrown in /shared/backups/github/my-sandboxes/vendor/doctrine/orm/lib/Doctrine/ORM/Configuration.php on line 165

Because I used the simple annotation reader (default behaviour).
See https://github.com/doctrine/orm/blob/2.11.x/lib/Doctrine/ORM/Tools/Setup.php#L75

Expected behavior

Be able to run Doctrine Console Tools (create shema) with Entities that used default Doctrine\Common\Annotations\SimpleAnnotationReader

Originally created by @llaville on GitHub (Jan 31, 2022). ### Bug Report <!-- Fill in the relevant information below to help triage your issue. --> | Q | A |------------ | ------ | BC Break | yes | Version | 2.11.x #### Summary `doctrine/annotations` is required when trying to create the schema with [Doctrine Console Tools](https://www.doctrine-project.org/projects/doctrine-orm/en/2.11/reference/tools.html) This issue is a try to clarify what @remicollet tried to explain in report #9416 (/cc @derrabus) Found myself the [same problem](https://github.com/llaville/php-compatinfo/issues/332) in my project `bartlett/php-compatinfo` #### Current behavior `Fatal error: Uncaught Error: Class 'Doctrine\Common\Annotations\AnnotationRegistry' not found` was raised when running the Doctrine Console Tools `vendor/bin/doctrine` #### How to reproduce Begin with a very simple `composer.json` contents : ``` { "minimum-stability": "stable", "require": { "doctrine/orm": "^2.11" } } ``` On a PHP 7.4.27 platform Today, when I install the dependencies (`composer update`), I got (`composer show`): ``` doctrine/cache 2.1.1 PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redi... doctrine/collections 1.6.8 PHP Doctrine Collections library that adds additional functionality on top of PHP arrays. doctrine/common 3.2.1 PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects d... doctrine/dbal 3.3.1 Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and manage... doctrine/deprecations v0.5.3 A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecat... doctrine/event-manager 1.1.1 The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine pr... doctrine/inflector 2.0.4 PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase... doctrine/instantiator 1.4.0 A small, lightweight utility to instantiate objects in PHP without invoking their constructors doctrine/lexer 1.2.2 PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers. doctrine/orm 2.11.1 Object-Relational-Mapper for PHP doctrine/persistence 2.3.0 The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine o... psr/cache 1.0.1 Common interface for caching libraries psr/container 1.1.2 Common Container Interface (PHP FIG PSR-11) psr/log 1.1.4 Common interface for logging libraries symfony/console v5.4.3 Eases the creation of beautiful and testable command line interfaces symfony/deprecation-contracts v2.5.0 A generic function and convention to trigger deprecation notices symfony/polyfill-ctype v1.24.0 Symfony polyfill for ctype functions symfony/polyfill-intl-grapheme v1.24.0 Symfony polyfill for intl's grapheme_* functions symfony/polyfill-intl-normalizer v1.24.0 Symfony polyfill for intl's Normalizer class and related functions symfony/polyfill-mbstring v1.24.0 Symfony polyfill for the Mbstring extension symfony/polyfill-php72 v1.24.0 Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions symfony/polyfill-php73 v1.24.0 Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions symfony/polyfill-php80 v1.24.0 Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions symfony/service-contracts v2.5.0 Generic abstractions related to writing services symfony/string v5.4.3 Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a ... ``` We may notice that `doctrine/annotations` package is not installed, but it's used by `doctrine/orm`: See https://github.com/doctrine/orm/blob/2.11.x/lib/Doctrine/ORM/Configuration.php#L10 Following documentation : https://www.doctrine-project.org/projects/doctrine-orm/en/2.11/reference/tools.html I create a `config/cli-config.php` file with following contents ```php <?php use Doctrine\ORM\Tools\Console\ConsoleRunner; // replace with file to your own project bootstrap require_once 'bootstrap.php'; // replace with mechanism to retrieve EntityManager in your app $entityManager = GetEntityManager(); return ConsoleRunner::createHelperSet($entityManager); ``` And I also create a `bootstrap.php` file with following contents ```php <?php use Doctrine\Common\Proxy\AbstractProxyFactory; use Doctrine\ORM\EntityManager; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Tools\Setup; function GetEntityManager(): EntityManagerInterface { $factory = null; $targetFile = 'database.sqlite'; $dbUrl = sprintf('sqlite:///$PWD/%s', $targetFile); $connection = ['url' => $dbUrl]; $isDevMode = true; $cache = null; $proxyDir = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'cache'; $paths = [implode(DIRECTORY_SEPARATOR, [__DIR__, 'Entity'])]; $config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode, $proxyDir, $cache); if ($isDevMode) { // suggested for DEV mode: see Doctrine ORM documentation // at https://www.doctrine-project.org/projects/doctrine-orm/en/2.8/reference/advanced-configuration.html#auto-generating-proxy-classes-optional $config->setAutogenerateProxyClasses(AbstractProxyFactory::AUTOGENERATE_ALWAYS); } else { // lazy generation on PROD or TEST modes (i.e: CI) $config->setAutogenerateProxyClasses(AbstractProxyFactory::AUTOGENERATE_FILE_NOT_EXISTS); } return EntityManager::create($connection, $config); } ``` The Use Case Project structure look like : ``` . ├── cache ├── composer.json ├── composer.lock ├── config │   ├── bootstrap.php │   └── cli-config.php ├── Entity └── vendor ├── autoload.php ├── bin ├── composer ├── doctrine ├── psr └── symfony ``` At first run attempt, we got following error : ``` nfigure caches without doctrine/cache 1.11 or symfony/cache. Please add an explicit dependency to either library. in /shared/backups/github/my-sandboxes/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Setup.php:193 ``` So I added `"symfony/cache": "^5.4"` constraint in my `composer.json` file. Update it and run once again to get final error ``` Fatal error: Uncaught Error: Class 'Doctrine\Common\Annotations\AnnotationRegistry' not found in /shared/backups/github/my-sandboxes/vendor/doctrine/orm/lib/Doctrine/ORM/Configuration.php:165 Stack trace: #0 /shared/backups/github/my-sandboxes/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Setup.php(75): Doctrine\ORM\Configuration->newDefaultAnnotationDriver(Array, true) #1 /shared/backups/github/my-sandboxes/config/bootstrap.php(25): Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration(Array, true, '/shared/backups...', NULL) #2 /shared/backups/github/my-sandboxes/config/cli-config.php(9): GetEntityManager() #3 /shared/backups/github/my-sandboxes/vendor/doctrine/orm/bin/doctrine.php(41): require('/shared/backups...') #4 /shared/backups/github/my-sandboxes/vendor/doctrine/orm/bin/doctrine(4): include('/shared/backups...') #5 {main} thrown in /shared/backups/github/my-sandboxes/vendor/doctrine/orm/lib/Doctrine/ORM/Configuration.php on line 165 ``` Because I used the simple annotation reader (default behaviour). See https://github.com/doctrine/orm/blob/2.11.x/lib/Doctrine/ORM/Tools/Setup.php#L75 #### Expected behavior Be able to run Doctrine Console Tools (create shema) with Entities that used default `Doctrine\Common\Annotations\SimpleAnnotationReader`
admin closed this issue 2026-01-22 15:41:22 +01:00
Author
Owner

@derrabus commented on GitHub (Jan 31, 2022):

The problem is the following line in your bootstrap.php:

$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode, $proxyDir, $cache);

This is where you actively opt-in to using annotations and this action requires doctrine/annotations to be installed. If for example you called createAttributeMetadataConfiguration() or createXmlMetadataConfiguration() instead, the error would disappear.

However, I think we should raise a meaningful error in createAnnotationMetadataConfiguration() if doctrine/annotations is not installed.

@derrabus commented on GitHub (Jan 31, 2022): The problem is the following line in your bootstrap.php: ```PHP $config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode, $proxyDir, $cache); ``` This is where you actively opt-in to using annotations and this action requires `doctrine/annotations` to be installed. If for example you called `createAttributeMetadataConfiguration()` or `createXmlMetadataConfiguration()` instead, the error would disappear. However, I think we should raise a meaningful error in `createAnnotationMetadataConfiguration()` if `doctrine/annotations` is not installed.
Author
Owner

@llaville commented on GitHub (Jan 31, 2022):

If for example you called createAttributeMetadataConfiguration() instead, the error would disappear.

👍 confirmed to fix it ! Thanks to point me the right way !

@llaville commented on GitHub (Jan 31, 2022): > If for example you called `createAttributeMetadataConfiguration()` instead, the error would disappear. 👍 confirmed to fix it ! Thanks to point me the right way !
Author
Owner

@llaville commented on GitHub (Jan 31, 2022):

@derrabus I've made changes on my project bartlett/php-compatinfo-db,

diff --git a/composer.json b/composer.json
index 72c12f1a..7417d83d 100644
--- a/composer.json
+++ b/composer.json
@@ -18,7 +18,6 @@
         "ext-spl": "*",
         "composer-runtime-api": "^2.0",
         "composer/semver": "^3.0",
-        "doctrine/annotations": "^1.13",
         "doctrine/orm": "^2.7",
         "doctrine/dbal": "^3.2",
         "symfony/cache": "^4.4|^5.0",
diff --git a/src/Infrastructure/Persistence/Doctrine/EntityManagerFactory.php b/src/Infrastructure/Persistence/Doctrine/EntityManagerFactory.php
index aaa5c945..8a3a8882 100644
--- a/src/Infrastructure/Persistence/Doctrine/EntityManagerFactory.php
+++ b/src/Infrastructure/Persistence/Doctrine/EntityManagerFactory.php
@@ -37,7 +37,7 @@ final class EntityManagerFactory
     public static function create(array $connection, bool $isDevMode, string $proxyDir, ?Cache $cache = null): EntityManagerInterface
     {
         $paths = [implode(DIRECTORY_SEPARATOR, [__DIR__, 'Entity'])];
-        $config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode, $proxyDir, $cache);
+        $config = Setup::createAttributeMetadataConfiguration($paths, $isDevMode, $proxyDir, $cache);
         if ($isDevMode) {
             // suggested for DEV mode: see Doctrine ORM documentation
             // at https://www.doctrine-project.org/projects/doctrine-orm/en/2.8/reference/advanced-configuration.html#auto-generating-proxy-classes-optional

and get another error

Fatal error: Uncaught Error: Call to undefined method ReflectionClass::getAttributes() in /shared/backups/bartlett/php-compatinfo-db/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/AttributeReader.php:29
Stack trace:
#0 /shared/backups/bartlett/php-compatinfo-db/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/AttributeDriver.php(46): Doctrine\ORM\Mapping\Driver\AttributeReader->getClassAnnotations(Object(ReflectionClass))
#1 /shared/backups/bartlett/php-compatinfo-db/vendor/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/AnnotationDriver.php(249): Doctrine\ORM\Mapping\Driver\AttributeDriver->isTransient('Bartlett\\Compat...')
#2 /shared/backups/bartlett/php-compatinfo-db/vendor/doctrine/persistence/lib/Doctrine/Persistence/Mapping/AbstractClassMetadataFactory.php(146): Doctrine\Persistence\Mapping\Driver\AnnotationDriver->getAllClassNames()
#3 /shared/backups/bartlett/php-compatinfo-db/src/Presentation/Console/Command/CreateCommand.php(73): Doctrine\Persistence\Mapping\AbstractClassMetadataFactory->ge in /shared/backups/bartlett/php-compatinfo-db/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/AttributeReader.php on line 29
@llaville commented on GitHub (Jan 31, 2022): @derrabus I've made changes on my project `bartlett/php-compatinfo-db`, ``` diff --git a/composer.json b/composer.json index 72c12f1a..7417d83d 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,6 @@ "ext-spl": "*", "composer-runtime-api": "^2.0", "composer/semver": "^3.0", - "doctrine/annotations": "^1.13", "doctrine/orm": "^2.7", "doctrine/dbal": "^3.2", "symfony/cache": "^4.4|^5.0", diff --git a/src/Infrastructure/Persistence/Doctrine/EntityManagerFactory.php b/src/Infrastructure/Persistence/Doctrine/EntityManagerFactory.php index aaa5c945..8a3a8882 100644 --- a/src/Infrastructure/Persistence/Doctrine/EntityManagerFactory.php +++ b/src/Infrastructure/Persistence/Doctrine/EntityManagerFactory.php @@ -37,7 +37,7 @@ final class EntityManagerFactory public static function create(array $connection, bool $isDevMode, string $proxyDir, ?Cache $cache = null): EntityManagerInterface { $paths = [implode(DIRECTORY_SEPARATOR, [__DIR__, 'Entity'])]; - $config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode, $proxyDir, $cache); + $config = Setup::createAttributeMetadataConfiguration($paths, $isDevMode, $proxyDir, $cache); if ($isDevMode) { // suggested for DEV mode: see Doctrine ORM documentation // at https://www.doctrine-project.org/projects/doctrine-orm/en/2.8/reference/advanced-configuration.html#auto-generating-proxy-classes-optional ``` and get another error ``` Fatal error: Uncaught Error: Call to undefined method ReflectionClass::getAttributes() in /shared/backups/bartlett/php-compatinfo-db/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/AttributeReader.php:29 Stack trace: #0 /shared/backups/bartlett/php-compatinfo-db/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/AttributeDriver.php(46): Doctrine\ORM\Mapping\Driver\AttributeReader->getClassAnnotations(Object(ReflectionClass)) #1 /shared/backups/bartlett/php-compatinfo-db/vendor/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/AnnotationDriver.php(249): Doctrine\ORM\Mapping\Driver\AttributeDriver->isTransient('Bartlett\\Compat...') #2 /shared/backups/bartlett/php-compatinfo-db/vendor/doctrine/persistence/lib/Doctrine/Persistence/Mapping/AbstractClassMetadataFactory.php(146): Doctrine\Persistence\Mapping\Driver\AnnotationDriver->getAllClassNames() #3 /shared/backups/bartlett/php-compatinfo-db/src/Presentation/Console/Command/CreateCommand.php(73): Doctrine\Persistence\Mapping\AbstractClassMetadataFactory->ge in /shared/backups/bartlett/php-compatinfo-db/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/AttributeReader.php on line 29 ```
Author
Owner

@llaville commented on GitHub (Jan 31, 2022):

Run new attempt with doctrine/annotations available on composer.json but got same error.

FYI: AttributeDriver->isTransient() is called on class https://github.com/llaville/php-compatinfo-db/blob/master/src/Infrastructure/Persistence/Doctrine/Entity/ClassRelationship.php
I don't see what is wrong with this Entity.

@llaville commented on GitHub (Jan 31, 2022): Run new attempt with `doctrine/annotations` available on `composer.json` but got same error. FYI: `AttributeDriver->isTransient()` is called on class https://github.com/llaville/php-compatinfo-db/blob/master/src/Infrastructure/Persistence/Doctrine/Entity/ClassRelationship.php I don't see what is wrong with this Entity.
Author
Owner

@derrabus commented on GitHub (Jan 31, 2022):

and get another error

This is because attributes are not available on PHP 7. Same issue: We should emit a meaningful error message in that case.

@derrabus commented on GitHub (Jan 31, 2022): > and get another error This is because attributes are not available on PHP 7. Same issue: We should emit a meaningful error message in that case.
Author
Owner

@llaville commented on GitHub (Jan 31, 2022):

I've perharps misunderstood what you said, but PHP attributes is a PHP 8 feature, and I don't used it !

@llaville commented on GitHub (Jan 31, 2022): I've perharps misunderstood what you said, but [PHP attributes](https://www.php.net/releases/8.0/en.php#attributes) is a PHP 8 feature, and I don't used it !
Author
Owner

@derrabus commented on GitHub (Jan 31, 2022):

My attempt to improve the situation: #9452

@derrabus commented on GitHub (Jan 31, 2022): My attempt to improve the situation: #9452
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: doctrine/archived-orm#6921