tenancy
tenancy copied to clipboard
Manual tenancy with CreateTenantConnection throws a TypeError
Bug description
Manually initializing Tenancy in manual mode throws an exception. The error only seems to occur on the first $tenant->run() call.

Stack trace:
(I moved the logic to a testing() method in the CreateTenantConnection listener so I could catch the exception in handle())
[2022-07-18 05:49:26] local.ERROR: Stancl\Tenancy\Listeners\CreateTenantConnection::testing(): Argument #1 ($event) must be of type Stancl\Tenancy\Events\Contracts\TenantEvent, Stancl\Tenancy\Events\TenancyInitialized given, called in /Users/lukas/Projects/tenancy-test/vendor/stancl/tenancy/src/Listeners/CreateTenantConnection.php on line 23 {"exception":"[object] (TypeError(code: 0): Stancl\\Tenancy\\Listeners\\CreateTenantConnection::testing(): Argument #1 ($event) must be of type Stancl\\Tenancy\\Events\\Contracts\\TenantEvent, Stancl\\Tenancy\\Events\\TenancyInitialized given, called in /Users/lukas/Projects/tenancy-test/vendor/stancl/tenancy/src/Listeners/CreateTenantConnection.php on line 23 at /Users/lukas/Projects/tenancy-test/vendor/stancl/tenancy/src/Listeners/CreateTenantConnection.php:29)
[stacktrace]
#0 /Users/lukas/Projects/tenancy-test/vendor/stancl/tenancy/src/Listeners/CreateTenantConnection.php(23): Stancl\\Tenancy\\Listeners\\CreateTenantConnection->testing(Object(Stancl\\Tenancy\\Events\\TenancyInitialized))
#1 /Users/lukas/Projects/tenancy-test/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php(441): Stancl\\Tenancy\\Listeners\\CreateTenantConnection->handle(Object(Stancl\\Tenancy\\Events\\TenancyInitialized))
#2 /Users/lukas/Projects/tenancy-test/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php(249): Illuminate\\Events\\Dispatcher->Illuminate\\Events\\{closure}('Stancl\\\\Tenancy\\\\...', Array)
#3 /Users/lukas/Projects/tenancy-test/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php(450): Illuminate\\Events\\Dispatcher->dispatch('Stancl\\\\Tenancy\\\\...')
#4 /Users/lukas/Projects/tenancy-test/vendor/stancl/tenancy/src/Tenancy.php(58): event(Object(Stancl\\Tenancy\\Events\\TenancyInitialized))
#5 /Users/lukas/Projects/tenancy-test/vendor/stancl/tenancy/src/Database/Concerns/TenantRun.php(23): Stancl\\Tenancy\\Tenancy->initialize(Object(App\\Models\\Tenant))
#6 /Users/lukas/Projects/tenancy-test/vendor/psy/psysh/src/ExecutionLoopClosure.php(55) : eval()'d code(1): Stancl\\Tenancy\\Database\\Models\\Tenant->run(Object(Closure))
#7 /Users/lukas/Projects/tenancy-test/vendor/psy/psysh/src/ExecutionLoopClosure.php(55): eval()
#8 /Users/lukas/Projects/tenancy-test/vendor/psy/psysh/src/ExecutionClosure.php(89): Psy\\{closure}()
#9 /Users/lukas/Projects/tenancy-test/vendor/psy/psysh/src/Shell.php(383): Psy\\ExecutionClosure->execute()
#10 /Users/lukas/Projects/tenancy-test/vendor/psy/psysh/src/Shell.php(354): Psy\\Shell->doInteractiveRun()
#11 /Users/lukas/Projects/tenancy-test/vendor/symfony/console/Application.php(171): Psy\\Shell->doRun(Object(Symfony\\Component\\Console\\Input\\ArrayInput), Object(Psy\\Output\\ShellOutput))
#12 /Users/lukas/Projects/tenancy-test/vendor/psy/psysh/src/Shell.php(329): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArrayInput), Object(Psy\\Output\\ShellOutput))
#13 /Users/lukas/Projects/tenancy-test/vendor/laravel/tinker/src/Console/TinkerCommand.php(81): Psy\\Shell->run()
#14 /Users/lukas/Projects/tenancy-test/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Laravel\\Tinker\\Console\\TinkerCommand->handle()
#15 /Users/lukas/Projects/tenancy-test/vendor/laravel/framework/src/Illuminate/Container/Util.php(41): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#16 /Users/lukas/Projects/tenancy-test/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure(Object(Closure))
#17 /Users/lukas/Projects/tenancy-test/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#18 /Users/lukas/Projects/tenancy-test/vendor/laravel/framework/src/Illuminate/Container/Container.php(651): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
#19 /Users/lukas/Projects/tenancy-test/vendor/laravel/framework/src/Illuminate/Console/Command.php(136): Illuminate\\Container\\Container->call(Array)
#20 /Users/lukas/Projects/tenancy-test/vendor/symfony/console/Command/Command.php(308): Illuminate\\Console\\Command->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#21 /Users/lukas/Projects/tenancy-test/vendor/laravel/framework/src/Illuminate/Console/Command.php(121): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#22 /Users/lukas/Projects/tenancy-test/vendor/symfony/console/Application.php(998): Illuminate\\Console\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#23 /Users/lukas/Projects/tenancy-test/vendor/symfony/console/Application.php(299): Symfony\\Component\\Console\\Application->doRunCommand(Object(Laravel\\Tinker\\Console\\TinkerCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#24 /Users/lukas/Projects/tenancy-test/vendor/symfony/console/Application.php(171): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#25 /Users/lukas/Projects/tenancy-test/vendor/laravel/framework/src/Illuminate/Console/Application.php(102): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#26 /Users/lukas/Projects/tenancy-test/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(129): Illuminate\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#27 /Users/lukas/Projects/tenancy-test/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#28 {main}
"}
Steps to reproduce
- In TenancyServiceProvider, add CreateTenantConnection listener to the TenancyInitialized event, remove BootstrapTenancy:
Events\TenancyInitialized::class => [
- Listeners\BootstrapTenancy::class,
+ Listeners\CreateTenantConnection::class,
],
- Create a tenant using tinker, and call
$tenant->run(fn() => 'test')
Expected behavior
The first $tenant->run(fn() => 'test') call should have returned 'test' instead of throwing the exception.
Laravel version
9.20.0
stancl/tenancy version
3.5.7