-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Description
Environment
Package
show
$ composer show --latest gedmo/doctrine-extensions
name : gedmo/doctrine-extensions
descrip. : Doctrine behavioral extensions
keywords : Blameable, behaviors, doctrine, extensions, gedmo, loggable, nestedset, odm, orm, sluggable, sortable, timestampable, translatable, tree, uploadable
versions : * v3.20.0
released : 2025-04-04, 1 month ago
latest : v3.20.0 released 2025-04-04, 1 month ago
type : library
license : MIT License (MIT) (OSI approved) https://spdx.org/licenses/MIT.html#licenseText
homepage : http://gediminasm.org/
source : [git] https://github.com/doctrine-extensions/DoctrineExtensions.git ea1d37586b8e4bae2a815feb38b177894b12c44c
dist : [zip] https://api.github.com/repos/doctrine-extensions/DoctrineExtensions/zipball/ea1d37586b8e4bae2a815feb38b177894b12c44c ea1d37586b8e4bae2a815feb38b177894b12c44c
path : /7.2-gedmo-bug/vendor/gedmo/doctrine-extensions
names : gedmo/doctrine-extensions
support
docs : https://github.com/doctrine-extensions/DoctrineExtensions/tree/main/doc
issues : https://github.com/doctrine-extensions/DoctrineExtensions/issues
source : https://github.com/doctrine-extensions/DoctrineExtensions/tree/v3.20.0
autoload
psr-4
Gedmo\ => src/
requires
behat/transliterator ^1.2
doctrine/collections ^1.2 || ^2.0
doctrine/deprecations ^1.0
doctrine/event-manager ^1.2 || ^2.0
doctrine/persistence ^2.2 || ^3.0 || ^4.0
php ^7.4 || ^8.0
psr/cache ^1 || ^2 || ^3
psr/clock ^1
symfony/cache ^5.4 || ^6.0 || ^7.0
requires (dev)
doctrine/annotations ^1.13 || ^2.0
doctrine/cache ^1.11 || ^2.0
doctrine/common ^2.13 || ^3.0
doctrine/dbal ^3.7 || ^4.0
doctrine/doctrine-bundle ^2.3
doctrine/mongodb-odm ^2.3
doctrine/orm ^2.20 || ^3.3
friendsofphp/php-cs-fixer ^3.70
nesbot/carbon ^2.71 || ^3.0
phpstan/phpstan ^2.1.1
phpstan/phpstan-doctrine ^2.0.1
phpstan/phpstan-phpunit ^2.0.3
phpunit/phpunit ^9.6
rector/rector ^2.0.6
symfony/console ^5.4 || ^6.0 || ^7.0
symfony/doctrine-bridge ^5.4 || ^6.0 || ^7.0
symfony/phpunit-bridge ^6.0 || ^7.0
symfony/uid ^5.4 || ^6.0 || ^7.0
symfony/yaml ^5.4 || ^6.0 || ^7.0
suggests
doctrine/mongodb-odm to use the extensions with the MongoDB ODM
doctrine/orm to use the extensions with the ORM
conflicts
doctrine/annotations <1.13 || >=3.0
doctrine/common <2.13 || >=4.0
doctrine/dbal <3.7 || >=5.0
doctrine/mongodb-odm <2.3 || >=3.0
doctrine/orm <2.20 || >=3.0 <3.3 || >=4.0
Doctrine packages
show
$ composer show --latest 'doctrine/*'
Color legend:
- patch or minor release available - update recommended
- major release available - update possible
- up to date version
Direct dependencies required in composer.json:
doctrine/dbal 3.9.4 4.2.3 Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.
doctrine/doctrine-bundle 2.14.0 2.14.0 Symfony DoctrineBundle
doctrine/doctrine-migrations-bundle 3.4.2 3.4.2 Symfony DoctrineMigrationsBundle
doctrine/orm 3.3.3 3.3.3 Object-Relational-Mapper for PHP
Transitive dependencies not required in composer.json:
doctrine/cache 2.2.0 2.2.0 PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.
doctrine/collections 2.3.0 2.3.0 PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.
doctrine/deprecations 1.1.5 1.1.5 A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.
doctrine/event-manager 2.0.1 2.0.1 The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.
doctrine/inflector 2.0.10 2.0.10 PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.
doctrine/instantiator 2.0.0 2.0.0 A small, lightweight utility to instantiate objects in PHP without invoking their constructors
doctrine/lexer 3.0.1 3.0.1 PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.
doctrine/migrations 3.9.0 3.9.0 PHP Doctrine Migrations project offer additional functionality on top of the database abstraction layer (DBAL) for versioning your database schema and easily deploying change...
doctrine/persistence 4.0.0 4.0.0 The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.
doctrine/sql-formatter 1.5.2 1.5.2 a PHP SQL highlighting library
PHP version
$ php -v
PHP 8.4.7 (cli) (built: May 9 2025 06:54:31) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.4.7, Copyright (c) Zend Technologies
with Zend OPcache v8.4.7, Copyright (c), by Zend Technologies
with Xdebug v3.4.2, Copyright (c) 2002-2025, by Derick Rethans
Subject
PR #2930 introduced the following bug: if a soft-deleted entity is referenced by another entity still in the identity map, and cascade persist is used, subsequent flush()
calls incorrectly treat the deleted entity as new and attempt to re-insert it into the database, e.g.:
// Create Foo and Bar and flush to db
$foo = new Foo();
$foo->setSlug('foo'.time());
$foo->addBar(new Bar());
$this->em->persist($foo);
$this->em->flush();
// Clear EM
$this->em->clear();
// Reload from db
$foo = $this->em->find(Foo::class, $foo->getId());
$bar = $foo->getBar()[0]; // Trigger lazy load
// Remove Foo, reference in Bar will remain
$this->em->remove($foo);
$this->em->flush();
// Flush again, Foo is seen as a new object
$this->em->flush();
This results in the following error:
An exception occurred while executing a query: SQLSTATE[23000]: Integrity constraint violation: 19 UNIQUE constraint failed: foo.slug
This happens because, starting from v3.20, the entity is detached during the postFlush
event and is therefore no longer a managed entity.
Since the $bar
entity is still in the identity map and holds a reference to the now-removed $foo
, and because cascade persist is enabled, Doctrine incorrectly treats $foo
as a new entity. It attempts to re-insert it, violating the unique constraint on slug
, as the soft-deleted entity is still present in the database.
Minimal repository with the bug
I've created a reproducer to illustrate the problem. It uses SQLite, so everything should work out of the box.
Steps to reproduce
- unzip
composer install
bin/console doctrine:schema:create
bin/console app:test
Expected results
No error, $foo
shouldn't get re-inserted.
Actual results
In ExceptionConverter.php line 41:
An exception occurred while executing a query: SQLSTATE[23000]: Integrity constraint violation: 19 UNIQUE constraint failed: foo.slug
In Exception.php line 24:
SQLSTATE[23000]: Integrity constraint violation: 19 UNIQUE constraint failed: foo.slug
In Statement.php line 130:
SQLSTATE[23000]: Integrity constraint violation: 19 UNIQUE constraint failed: foo.slug