Adquiere este curso para tener acceso a todas las lecciones
Comprar curso8. Creación de Inquilino y Dominio desde Tinker
En este capítulo se muestra cómo crear inquilinos utilizando tinker para fines de prueba. Se presenta el código que utiliza el método "create" de la clase "Tenant" para crear dos inquilinos con sus respectivos dominios utilizando el método "create" de la relación "domains".
7 comentarios
Inicia sesión para comentar
Comentarios:
-
Jhonny Chable hace 6 meses
Hola Victor. ¿Qué tal? Estoy usando SqlServer, Laragon y laravel 11. Estoy teniendo el siguiente error:
λ php artisan tinker
Psy Shell v0.12.3 (PHP 8.3.4 — cli) by Justin Hileman
> $tenant1 = App\Models\Tenant::create(['id' => 'foo']);Stancl\Tenancy\Exceptions\DatabaseManagerNotRegisteredException Database manager for driver sqlsrv is not registered.
No he tenido problemas con las migraciones, creación de usuarios y he registrado rutas y providers según los cambios de laravel 11. Tambien he añadido los host virtuales al apache de laragon. El comando de create si crea un registro en la base de datos que tengo, pero en data me genera un arreglo vacío y no me crea la bd del tenant foo:
id, created_at, updated_at, data
foo, 2024-05-03 16:34:33.997, 2024-05-03 16:34:33.997, []
Espero puedas apoyarme. Un saludo-
Jhonny Chable hace 6 meses
Ya lo solucioné. Resulta que no había un driver para sql server así que tuve que crear el mío y registrarlo en tenancy.php:
'sqlsrv' => App\TenantDatabaseManagers\SqlServerDatabaseManager::class,
-
-
Diego Dominguez M hace 11 meses
Hola Víctor, voy llevando este curso bien… pero se me viene a la mente el escenario en donde tenga que subir este proyecto a un host compartido (tipo Hostgator o Hostinger) ¿Cómo se manejaría el tema de la creación automática de los subdominios en el CPanel? Gracias
-
Victor Arana Flores hace 11 meses
Hola Diego, tienes que crear un dns cuyo hostname sea * y apunte al ip de tu server.
-
Diego Dominguez M hace 11 meses
Gracias, disculpa Victor, no entendí. ¿podrias ser un poco mas especifico por favor?
-
Victor Arana Flores hace 11 meses
Hola Diego, cuando despliegas un proyecto aparte del servidor tienes que contratar un dominio. Para que los dominios apunten a tu servidor tabajas con dns.
Los dns son los que se encargan de especificar que si alguien pregunta por ese dominio, debe ridirigirlo hacia la ip de tu servidor.
De igual manera que agregas DNS para tus dominios, se agrega dns para los subdominios. Por ejemplo prueba.codersfree.com (En este caso el subdominio es prueba).
Puedes usar el comodin * para que todos los subdominios apunten al mismo servidor y sea el sistema multitenancy que has creado es el que se encargue de mostrar uno u otro contenido. -
Diego Dominguez M hace 10 meses
Victor, voy a revisar lo que me dices. Muchas gracias
-
Juandiego Astorga Lopez hace 10 meses
Hola Diego, pudiste implementarlo, tengo el mismo problema con Hosgator, al crear el Tenant no me genera la BD
-
-
Guillermo hace 1 año
Hola Victor, podrias crear algunos ejemplos con API
-
Victor Arana Flores hace 1 año
Hola Guillermo, lamentablemente el curso ya está culminado y no se consideró hacer una aplicación api, sino web.
Pero si gustas tambien cuento con un curso de apis, que en combinación con este lo podrías usar para lograr lo que estas buscando. -
Eribert Elias Marquez Bello hace 1 año
Podrias crear otro curso de creacion de sistemas multy tenancy con api rest?
-
Victor Arana Flores hace 1 año
Hola Eribert, por el momento no está en mis planes hacer un curso con esas caracteristicas.
-
-
José Daniel Mejias hace 1 año
hola Victor …esta configuracion aplica a las rutas api ?. Ejemplo si tengo un proyecto con react y laravel, al momento de realizar mis rutas por defecto la creo en api, eso significa que en las rutas del tenancy debo definir todas las rutas ya definidas en api?
-
Steph Marin hace 1 año
Tengo la misma cuestión
-
-
Luis Guillermo Oviedo Ochoa hace 1 año
Hola me he quedado en el min -04:56 al probar el subdominio me sale el siguiente mensaje de error me podrias ayudar
Class "app\Models\Tenant" not found
C:\wamp64\www\Tenancy\vendor\stancl\tenancy\src\Resolvers\DomainTenantResolver.php : 35-
Luis Guillermo Oviedo Ochoa hace 1 año
Resuelto: en config\tenancy.php tenia en 'tenant_model' => Tenant::class, y era 'tenant_model' => \App\Models\Tenant::class, de esta manera si me muesta el mensaje de los subdominios
-
-
Raul Hacho Cutipa hace 1 año
no se crea la base de datos. devuelve. este error (data: null,)
$tenant1 = App\Models\Tenant::create(['id' => 'subdominio1']);
= App\Models\Tenant {#4589
id: "subdominio1",
updated_at: "2023-04-07 21:39:25",
created_at: "2023-04-07 21:39:25",
data: null,
}-
Raul Hacho Cutipa hace 1 año
No genera ningun error pero no se crea la base de datos para el subdominio
-
Victor Arana Flores hace 1 año
Hola Raul ¿que S.O estás usando?
-
Raul Hacho Cutipa hace 1 año
Windows 11
-
Esteban Benitez hace 1 año
A mi me pasó, pero es porque no configuré el modelo, regresa a la clase 6 y asegúrate de haber hecho todos los pasos
-
Dennis Ramos hace 5 meses
Yo tuve el mismo error pero era porque en config/app.php en providers no había colocado
App\Providers\TenancyServiceProvider::class,
-
-
Victor Arana Flores hace 1 año
Para propósitos de prueba, puedes crear un inquilino en tinker sin necesidad de crear controladores o vistas aún. Simplemente abre tinker ejecutando el siguiente comando en la terminal:
php artisan tinker
Una vez dentro, crea tu primer inquilino con el siguiente código:
$tenant1 = App\Models\Tenant::create(['id' => 'foo']); $tenant1->domains()->create(['domain' => 'foo.localhost']);
También puedes crear tantos inquilinos como desees siguiendo el mismo patrón, como lo hacemos a continuación:
$tenant2 = App\Models\Tenant::create(['id' => 'bar']); $tenant2->domains()->create(['domain' => 'bar.localhost']);
Una vez que hayas creado tus inquilinos, el siguiente paso es crear un usuario dentro de la base de datos de cada uno. Esto se puede hacer fácilmente ejecutando el siguiente código:
App\Models\Tenant::all()->runForEach(function () { App\Models\User::factory()->create(); });
Con estos sencillos pasos ya habrás creado inquilinos en Laravel y estarás listo para seguir avanzando con tu proyecto. ¡Anímate a probarlo!
-
Luis Guillermo Oviedo Ochoa hace 1 año
hola, pregunta, los subdominios se pueden definir 'bar.localhost' o para efecto del host que se creo se debe colocar mejor 'bar.tenancy.test'
-
Victor Arana Flores hace 1 año
Hola Luis, si usas un bar.localhost en vez de bar.tenancy.test estarías usando un sobdominio para localhost y no para tenancy.test lo cual no tendría mucho sentido.
Los subdominios indican que todos son instancias de un mismo dominio, pero distingues a una instancia de otro por su subdominio.
Es como que mi web sea codersfree.com, y trabaje con “subdominios” web.victor-arana.com
En todo caso trabajaría con diminios diferentes, y no tendría porque trabajar con subdiminios.
-