Skip to content

Commit 9c906b0

Browse files
committed
Merge branch '1.4' into 1.5
2 parents 52a2a67 + 4b9239b commit 9c906b0

File tree

2 files changed

+72
-1
lines changed

2 files changed

+72
-1
lines changed

src/EntityManagerFactory.php

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace LaravelDoctrine\ORM;
44

55
use Doctrine\Common\Cache\Cache;
6+
use Doctrine\Common\EventManager;
67
use Doctrine\ORM\Cache\DefaultCacheFactory;
78
use Doctrine\ORM\Configuration;
89
use Doctrine\ORM\EntityManager;
@@ -104,6 +105,8 @@ public function create(array $settings = [])
104105

105106
$this->setMetadataDriver($settings, $configuration);
106107

108+
$eventManager = $this->createEventManager($settings);
109+
107110
$driver = $this->getConnectionDriver($settings);
108111

109112
$connection = $this->connection->driver(
@@ -133,7 +136,8 @@ public function create(array $settings = [])
133136

134137
$manager = EntityManager::create(
135138
$connection,
136-
$configuration
139+
$configuration,
140+
$eventManager
137141
);
138142

139143
$manager = $this->decorateManager($settings, $manager);
@@ -460,6 +464,23 @@ protected function registerMappingTypes(array $settings = [], EntityManagerInter
460464
}
461465
}
462466

467+
/**
468+
* @param array $settings
469+
*
470+
* @throws \Illuminate\Contracts\Container\BindingResolutionException
471+
* @return null|EventManager
472+
*/
473+
private function createEventManager(array $settings = [])
474+
{
475+
$customEventManager = Arr::get($settings, 'event_manager');
476+
477+
if (!$customEventManager) {
478+
return null;
479+
}
480+
481+
return $this->container->make($customEventManager);
482+
}
483+
463484
/**
464485
* Check if master slave connection was being configured.
465486
*

tests/EntityManagerFactoryTest.php

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,52 @@ public function test_wrapper_connection()
529529
$this->assertInstanceOf(FakeConnection::class, $manager->getConnection());
530530
}
531531

532+
public function test_custom_event_manager()
533+
{
534+
m::resetContainer();
535+
536+
$config = new ConfigRepository([
537+
'database.connections.mysql' => [
538+
'driver' => 'mysql'
539+
],
540+
'doctrine' => [
541+
'meta' => 'annotations',
542+
'connection' => 'mysql',
543+
'paths' => ['Entities'],
544+
'proxies' => [
545+
'path' => 'dir',
546+
'auto_generate' => false,
547+
'namespace' => 'namespace'
548+
],
549+
'event_manager' => 'my_event_manager'
550+
],
551+
'doctrine.custom_datetime_functions' => [],
552+
'doctrine.custom_numeric_functions' => [],
553+
'doctrine.custom_string_functions' => []
554+
]);
555+
556+
$container = new \Illuminate\Container\Container();
557+
$container->singleton(Repository::class, function () use ($config) {
558+
return $config;
559+
});
560+
561+
$container->alias(FakeEventManager::class, 'my_event_manager');
562+
563+
$factory = new EntityManagerFactory(
564+
$container,
565+
new Setup(),
566+
new MetaDataManager($container),
567+
new ConnectionManager($container),
568+
new CacheManager($container),
569+
$config,
570+
new EntityListenerResolver($container)
571+
);
572+
573+
$manager = $factory->create($config->get('doctrine'));
574+
575+
$this->assertInstanceOf(FakeEventManager::class, $manager->getEventManager());
576+
}
577+
532578
/**
533579
* MOCKS
534580
*
@@ -921,6 +967,10 @@ private function getDummyBaseInputConfig()
921967
}
922968
}
923969

970+
class FakeEventManager extends \Doctrine\Common\EventManager
971+
{
972+
}
973+
924974
class FakeConnection extends Connection
925975
{
926976
}

0 commit comments

Comments
 (0)