Skip to content

Commit cb132b9

Browse files
authored
fix: use cascade 'merge' only if available (#979)
1 parent cf1cd3d commit cb132b9

1 file changed

Lines changed: 8 additions & 1 deletion

File tree

src/DependencyInjection/SonataClassificationExtension.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
namespace Sonata\ClassificationBundle\DependencyInjection;
1515

16+
use Doctrine\ORM\EntityManager;
17+
use Sonata\ClassificationBundle\Entity\BaseCategory;
1618
use Sonata\Doctrine\Mapper\Builder\OptionsBuilder;
1719
use Sonata\Doctrine\Mapper\DoctrineCollector;
1820
use Symfony\Component\Config\Definition\Processor;
@@ -133,11 +135,16 @@ private function registerSonataDoctrineMapping(array $config): void
133135
->addOrder('position', 'ASC')
134136
);
135137

138+
$categoryCascade = ['persist', 'refresh', 'merge', 'detach'];
139+
$categoryIsEntity = \in_array(BaseCategory::class, class_parents($config['class']['category']), true);
140+
if ($categoryIsEntity && class_exists(EntityManager::class) && !method_exists(EntityManager::class, 'merge')) { // @phpstan-ignore-line
141+
unset($categoryCascade[array_search('merge', $categoryCascade, true)]);
142+
}
136143
$collector->addAssociation(
137144
$config['class']['category'],
138145
'mapManyToOne',
139146
OptionsBuilder::createManyToOne('parent', $config['class']['category'])
140-
->cascade(['persist', 'refresh', 'merge', 'detach'])
147+
->cascade(array_values($categoryCascade))
141148
->inversedBy('children')
142149
->addJoin([
143150
'name' => 'parent_id',

0 commit comments

Comments
 (0)