From 566f50440ae385b7cc75dde0bbc40361f315e92a Mon Sep 17 00:00:00 2001 From: lukinovec Date: Fri, 5 Jun 2026 07:18:42 +0200 Subject: [PATCH] Improve comments --- .../DatabaseCacheBootstrapper.php | 5 +++- src/TenancyServiceProvider.php | 27 ++++++++++--------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/Bootstrappers/DatabaseCacheBootstrapper.php b/src/Bootstrappers/DatabaseCacheBootstrapper.php index 0e41849f..0ec29266 100644 --- a/src/Bootstrappers/DatabaseCacheBootstrapper.php +++ b/src/Bootstrappers/DatabaseCacheBootstrapper.php @@ -25,7 +25,10 @@ use Stancl\Tenancy\TenancyServiceProvider; * * Notably, this bootstrapper sets TenancyServiceProvider::$adjustCacheManagerUsing to a callback * that ensures all affected stores still use the central connection when accessed via global cache - * (typicaly the GlobalCache facade or global_cache() helper). + * (typically the GlobalCache facade or global_cache() helper), even though this bootstrapper explicitly + * sets the connection to tenant for all scoped cache stores. TenancyServiceProvider::makeDatabaseCacheStoresCentral() + * cannot fix globalCache on its own because it reads 'tenant' from config (set by this bootstrapper), not null, + * so the callback is still needed to correct the connection to central for globalCache. */ class DatabaseCacheBootstrapper implements TenancyBootstrapper { diff --git a/src/TenancyServiceProvider.php b/src/TenancyServiceProvider.php index aeaa0855..d0316ed9 100644 --- a/src/TenancyServiceProvider.php +++ b/src/TenancyServiceProvider.php @@ -88,23 +88,26 @@ class TenancyServiceProvider extends ServiceProvider // This works great for cache stores that are *directly* scoped, like Redis or // any other tagged or prefixed stores, but it doesn't work for the database driver. // - // When we use the DatabaseTenancyBootstrapper, it changes the default connection, - // and therefore the connection of the database store that will be created when - // this new CacheManager is instantiated again. + // When DatabaseTenancyBootstrapper is used, it changes the default DB connection + // to 'tenant'. A freshly created CacheManager would therefore instantiate database + // stores with the tenant connection. // - // For that reason, we also adjust the relevant stores on this new CacheManager - // using the callback below. It is set by DatabaseCacheBootstrapper. + // For that reason, we adjust the relevant stores on this new CacheManager + // using the makeDatabaseCacheStoresCentral() method and the $adjustCacheManagerUsing callback below + // (set by DatabaseCacheBootstrapper). $manager = new CacheManager($app); - // Make globalCache use either the configured non-null connection, - // or fall back to the central connection. + // When DatabaseTenancyBootstrapper is used, database stores whose 'connection' + // config is null fall back to the default DB connection ('tenant'). Reset each + // such store to its explicitly configured connection, or fall back to central. $this->makeDatabaseCacheStoresCentral($manager); - // If a bootstrapper (like DatabaseCacheBootstrapper) makes the - // cache connection tenant explicitly, the makeDatabaseCacheStoresCentral() - // call ends up setting the tenant connection rather than the central one, - // and the $adjustCacheManagerUsing callback is needed to - // make globalCache use the central connection. + // DatabaseCacheBootstrapper explicitly writes 'tenant' into each store's 'connection' + // config. makeDatabaseCacheStoresCentral() above would then read 'tenant' as the + // configured value (not null) and use it directly, so the central connection fallback + // wouldn't be used. + // + // This callback is used to correct those connections back to central for globalCache. if (static::$adjustCacheManagerUsing !== null) { (static::$adjustCacheManagerUsing)($manager); }