Support the ongoing development of →
posted 1 year ago

Hello @juanchos2018

I think you mean multi tenant, is that correct? Or do you have an explicit package in mind?

For a multi tenant application you need to decide if you want to have all data in the same database or a database for each tenant. For both options I don't see any reason that it can't be done by SQL Server.


uhmmmm, but I have tried with sqsrv however it has not worked, since its managers only have : 'sqlite' => Stancl\Tenancy\TenantDatabaseManagers\SQLiteDatabaseManager::class, 'mysql' => Stancl\Tenancy\TenantDatabaseManagers\MySQLDatabaseManager::class, 'pgsql' => Stancl\Tenancy\TenantDatabaseManagers\PostgreSQLDatabaseManager::class,

cap-marin liked this reply


I have the same problem with sql server, if I found a solution, I will write here...


If you want to adopt Stancl\Tenancy, you may create your own SqlServerDatabaseManager class to add in tenancy configuration:

// config/tenancy.php
'managers' => [
    'sqlite' => Stancl\Tenancy\TenantDatabaseManagers\SQLiteDatabaseManager::class,
    'mysql' => Stancl\Tenancy\TenantDatabaseManagers\MySQLDatabaseManager::class,
    'pgsql' => Stancl\Tenancy\TenantDatabaseManagers\PostgreSQLDatabaseManager::class,
    'sqlsrv' => App\Services\SqlServerDatabaseManager::class,

Obviously, you must install Microsoft drivers for PHP in your server...

I have created my class for SQL Server. If you want me to share it, please email me at: [email protected]


Would you share it here? It can be useful for other devs (if it doesn't contain sensitive data).


Of course, here is the code for the class I created. You should first configure the database.php and tenancy.php files to establish the connection with SQL Server & call this class in managers:

'sqlsrv' => App\Services\SQLServerTenantDatabaseManager::class,



namespace Stancl\Tenancy\TenantDatabaseManagers;

use Illuminate\Database\Connection;
use Illuminate\Support\Facades\DB;
use Stancl\Tenancy\Contracts\TenantDatabaseManager;
use Stancl\Tenancy\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Exceptions\NoConnectionSetException;

class SQLServerTenantDatabaseManager implements TenantDatabaseManager
    /** @var string */
    protected $connection;

    protected function database(): Connection
        if ($this->connection === null) {
            throw new NoConnectionSetException(static::class);

        return DB::connection($this->connection);

    public function setConnection(string $connection): void
        $this->connection = $connection;

    public function createDatabase(TenantWithDatabase $tenant): bool
        return $this->database()->statement("CREATE DATABASE \"{$tenant->database()->getName()}\" ");

    public function deleteDatabase(TenantWithDatabase $tenant): bool
        return $this->database()->statement("DROP DATABASE \"{$tenant->database()->getName()}\"");

    public function databaseExists(string $name): bool
        return (bool) $this->database()->select("SELECT * FROM sysdatabases WHERE name = '$name'");

    public function makeConnectionConfig(array $baseConfig, string $databaseName): array
        $baseConfig['database'] = $databaseName;

        return $baseConfig;

I hope it's helpful. :3

Last updated 1 year ago.

Sign in to participate in this thread!


Your banner here too?


We'd like to thank these amazing companies for supporting us

Your logo here?

The Laravel portal for problem solving, knowledge sharing and community building.

© 2024 - All rights reserved.