Search code examples
laravelmulti-tenant

stancl/tenancy: How to fetch data from tenant db globally?


I used to fetch data from db and make available in all View through ServiceProvider, But now, I am using stancl/tenancy for multi-tenant system. And I need to pass some global data to all view files, writing the fetch data in ServiceProvider returns data from central database only. So, how can I fetch data from tenant DB to all view files globally before requesting any other requests?


Solution

  • Service Providers run before the tenant is identified and can therefore not be used to make configurations like sharing data to all views.

    Instead, you can make a custom tenancy bootstrapper by creating a class that implements the Stancl\Tenancy\Contracts\TenancyBootstrapper interface.

    namespace App;
    
    use View;
    use Stancl\Tenancy\Contracts\Tenant;
    use Stancl\Tenancy\Contracts\TenancyBootstrapper;
    
    class ViewBootstrapper implements TenancyBootstrapper
    {
        public function bootstrap(Tenant $tenant)
        {
            // Write your logic here.
            View::share('variable', 'data');
        }
    
        public function revert()
        {
            // Optional, but recommended:
            // Write you logic here that reverts the actions.
        }
    }
    

    Finally, add it to the bootstrappers array in your config/tenancy.php file to enable the bootstrapper.