+1 para a resposta @morphatic, é bastante preciso na maioria das coisas.
Migração
Para seu banco de dados principal, você deve poder usar o padrão
database/migration
e utilize o php artisan make:migration
e php artisan migrate
. No entanto, o Tenanti usará o caminho de migração definido na configuração "driver". por exemplo:
'path' => database_path('tenanti/user'),
Neste caso, a migração será criada/migrada de
database/tenanti/user
(você pode escolher outra pasta e ela usará essa pasta). Depois de configurar isso, você pode criar um novo arquivo de migração para o locatário do usuário via php artisan tenanti:make user create_blogs_table
(como exemplo) e execute a migração via php artisan tenanti:migrate user
(veja a semelhança entre o comando de migração do Laravel e o Tenanti?). Motorista
Driver é apenas o agrupamento de um inquilino, você pode agrupar por usuários, empresas ou equipe etc. grupo" ou "motorista".
Autenticação ou acesso ao banco de dados
Em primeiro lugar, você precisa considerar como está planejando distinguir cada inquilino. Na maioria das vezes eu vejo as pessoas tendem a optar por subdomínio. Portanto, neste caso, você precisa verificar se o subdomínio pertence a algum usuário (consultando o banco de dados principal) usando um middleware e, em seguida, conectar-se ao banco de dados que pertence ao usuário.
O Tenanti não gerencia essa parte do processo, porque todos têm um estilo diferente nesse aspecto, mas fornecemos um código para se conectar dinamicamente ao seu locatário de banco de dados a partir de uma configuração de banco de dados básica.
Digamos que você tenha a seguinte configuração:
<?php
return [
'fetch' => PDO::FETCH_CLASS,
'default' => 'primary',
'connections' => [
'primary' => [
//
],
'tenants' => [
'driver' => 'mysql',
'host' => 'dbhost', // for user with id=1
'username' => 'dbusername', // for user with id=1
'password' => 'dbpassword', // for user with id=1
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
],
],
'migrations' => 'migrations',
'redis' => [ ... ],
];
Você pode seguir a etapa disponível em https://github.com/orchestral/ tenanti#multi-database-connection-setup e adicione o seguinte código.
<?php namespace App\Providers;
use Orchestra\Support\Facades\Tenanti;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Tenanti::setupMultiDatabase('tenants', function (User $entity, array $template) {
$template['database'] = "tenant_{$entity->getKey()}";
return $template;
});
}
}
Isso garantiria que você estivesse usando
tenant_1
banco de dados para user=1, tenant_2
banco de dados para user=2 e assim por diante. Então, como o Tenanti detecta qual usuário está ativo?
É aqui que você precisa adicionar lógica ao seu middleware.
$user = App\User::whereSubdomain($request->route()->parameter('tenant'))->first();
Tenanti::driver('user')->asDefaultDatabase($user, 'tenants_{id}');