Creación de Inquilino y Dominio desde Tinker
Comprar curso

8. 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

    Jhonny Chable hace 1 mes

    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 1 mes

      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

    Diego Dominguez M hace 6 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 6 meses

      Hola Diego, tienes que crear un dns cuyo hostname sea * y apunte al ip de tu server.

    • Diego Dominguez M hace 6 meses

      Gracias, disculpa Victor, no entendí. ¿podrias ser un poco mas especifico por favor?

    • Victor Arana Flores hace 6 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 5 meses

      Victor, voy a revisar lo que me dices. Muchas gracias

    • Juandiego Astorga Lopez hace 5 meses

      Hola Diego, pudiste implementarlo, tengo el mismo problema con Hosgator, al crear el Tenant no me genera la BD

  • Guillermo

    Guillermo hace 11 meses

    Hola Victor, podrias crear algunos ejemplos con API

    • Victor Arana Flores hace 11 meses

      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 11 meses

      Podrias crear otro curso de creacion de sistemas multy tenancy con api rest?

    • Victor Arana Flores hace 11 meses

      Hola Eribert, por el momento no está en mis planes hacer un curso con esas caracteristicas.

  • José Daniel Mejias

    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

    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

    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 1 mes

      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

    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.