+1 a la respuesta de @morphatic, es bastante precisa en la mayoría de las cosas.
Migración
Para su base de datos principal, debería poder usar la database/migration
predeterminada y utilice php artisan make:migration
y php artisan migrate
.
Sin embargo, Tenanti utilizará la ruta de migración establecida en la configuración del "controlador". por ejemplo:
'path' => database_path('tenanti/user'),
En este caso, la migración se creará/migrará desde database/tenanti/user
(puede elegir otra carpeta y usará esa carpeta). Una vez que configure esto, puede crear un nuevo archivo de migración para el arrendatario del usuario a través de php artisan tenanti:make user create_blogs_table
(como ejemplo) y ejecute la migración a través de php artisan tenanti:migrate user
(¿Ves la similitud entre el comando de migración de Laravel y Tenanti?).
Conductor
El controlador es solo la agrupación de un arrendatario, tal vez lo agrupe por usuarios, empresas o equipo, etc. Y existe la posibilidad de que necesite más de un tipo de grupo por proyecto; de lo contrario, la mayoría de las veces solo usará un solo " grupo" o "conductor".
Autenticación o acceso a la base de datos
En primer lugar, debe considerar cómo planea distinguir a cada inquilino. La mayoría de las veces vería que la gente tiende a optar por el subdominio. Entonces, en este caso, debe verificar si el subdominio pertenece a alguno de los usuarios (al consultar la base de datos principal) utilizando un middleware y luego conectarse a la base de datos que pertenece al usuario.
Tenanti no administra esa parte del proceso, porque todos tienen un estilo diferente en ese aspecto, pero proporcionamos un código para conectarse dinámicamente a su inquilino de base de datos desde una configuración de base de datos.
Digamos que tiene la siguiente configuración:
<?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' => [ ... ],
];
Puede seguir el paso disponible en https://github.com/orchestral/ tenti#configuración-de-conexión-de-base-de-datos-múltiples y agrega el siguiente 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;
});
}
}
Esto aseguraría que esté usando tenant_1
base de datos para usuario=1, tenant_2
base de datos para usuario=2 y así sucesivamente.
Aquí es donde necesita agregar lógica en su middleware.
$user = App\User::whereSubdomain($request->route()->parameter('tenant'))->first();
Tenanti::driver('user')->asDefaultDatabase($user, 'tenants_{id}');