Skip to content

Commit 6e9a40c

Browse files
committed
Add sqlite foreign keys enabler listener
1 parent 4cb83ac commit 6e9a40c

File tree

3 files changed

+28
-0
lines changed

3 files changed

+28
-0
lines changed

src/EventListener/Doctrine/PropagateUpdatesListener.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,19 @@
88
use ApiPlatform\Exception\InvalidArgumentException;
99
use ApiPlatform\Metadata\GetCollection;
1010
use Doctrine\Common\Util\ClassUtils;
11+
use Doctrine\DBAL\Platforms\SqlitePlatform;
1112
use Doctrine\ORM\EntityRepository;
1213
use Doctrine\ORM\Event\OnFlushEventArgs;
1314
use Doctrine\ORM\Event\PostFlushEventArgs;
15+
use Doctrine\ORM\Event\PreFlushEventArgs;
1416
use Doctrine\ORM\PersistentCollection;
1517
use Doctrine\ORM\UnitOfWork;
1618
use Doctrine\Persistence\ManagerRegistry;
1719
use Doctrine\Persistence\ObjectManager;
1820
use Doctrine\Persistence\ObjectRepository;
1921
use Silverback\ApiComponentsBundle\DataProvider\PageDataProvider;
2022
use Silverback\ApiComponentsBundle\Entity\Component\Collection;
23+
use Silverback\ApiComponentsBundle\Entity\Core\Page;
2124
use Silverback\ApiComponentsBundle\Entity\Core\PageDataInterface;
2225
use Silverback\ApiComponentsBundle\HttpCache\ResourceChangedPropagatorInterface;
2326
use Silverback\ApiComponentsBundle\Repository\Core\ComponentPositionRepository;
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace Silverback\ApiComponentsBundle\EventListener\Doctrine;
4+
5+
use Doctrine\DBAL\Platforms\SqlitePlatform;
6+
use Doctrine\ORM\Event\PreFlushEventArgs;
7+
8+
class SqlLiteForeignKeyEnabler
9+
{
10+
public function preFlush(PreFlushEventArgs $args): void
11+
{
12+
$conn = $args->getObjectManager()->getConnection();
13+
if (!$conn->getDatabasePlatform() instanceof SqlitePlatform) {
14+
return;
15+
}
16+
17+
$conn->executeStatement('PRAGMA foreign_keys = ON;');
18+
}
19+
}

src/Resources/config/services.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
use Silverback\ApiComponentsBundle\EventListener\Api\UserEventListener;
6969
use Silverback\ApiComponentsBundle\EventListener\Doctrine\PropagateUpdatesListener;
7070
use Silverback\ApiComponentsBundle\EventListener\Doctrine\PublishableListener;
71+
use Silverback\ApiComponentsBundle\EventListener\Doctrine\SqlLiteForeignKeyEnabler;
7172
use Silverback\ApiComponentsBundle\EventListener\Doctrine\TimestampedListener;
7273
use Silverback\ApiComponentsBundle\EventListener\Doctrine\UploadableListener;
7374
use Silverback\ApiComponentsBundle\EventListener\Form\EntityPersistFormListener;
@@ -1386,6 +1387,11 @@
13861387
->arg('$nameConverter', new Reference('api_platform.name_converter', ContainerInterface::IGNORE_ON_INVALID_REFERENCE));
13871388
$services->alias(OrSearchFilter::class, 'silverback.doctrine.orm.or_search_filter');
13881389

1390+
$services
1391+
->set(SqlLiteForeignKeyEnabler::class)
1392+
->tag('doctrine.event_listener', ['event' => DoctrineEvents::preFlush])
1393+
;
1394+
13891395
$services
13901396
->set('silverback.api_components.event_listener.doctrine.propagate_updates_listener')
13911397
->class(PropagateUpdatesListener::class)

0 commit comments

Comments
 (0)