Laravel 5 es una versión completamente nueva del popular framework. Lamentablemente, todavía no existen buenas configuraciones multiusuario para Laravel 5. Por eso decidí crear también mi propia versión simple, basada en Ámbitos globales elocuentes.
En mi caso, quería una tabla de sitios, con categorías que tuvieran una relación de varios a varios. Así:
sitios
id | nombre
Categorías
id | nombre
categoría del sitio
id | id del sitio | id de la categoría
Por lo tanto, esta estructura de tabla es una relación de varios a varios. Con esta configuración, puede crear una configuración de varios sitios con diferentes categorías. El sitio A tiene las categorías 1 y 2, el sitio B tiene la categoría 3, etc. Se define en el modelo de la siguiente manera:
Aplicación\Sitio.php
perteneceAMuchos('Aplicación\Categoría', 'categoría_sitio'); } }
Y la categoría como:
Aplicación\Categoría.php
perteneceAMuchos('Aplicación\Sitio', 'categoría_sitio'); }
Tenga en cuenta que esta categoría tiene asignada la característica TenantableTrait. Es decir:
Aplicación\Características\TenantableTrait.php
Y por último, no olvidemos el alcance global de Eloquent:
Aplicación\TenantScope.php
whereHas('sites', function($query) use($siteId) { $query->where('sites.id', $siteId); }); } } /** * Eliminar el alcance del generador de consultas Eloquent indicado. * * @param \Illuminate\Database\Eloquent\Builder $builder * @param \Illuminate\Database\Eloquent\Model $model * @return void */ public function remove(Builder $builder, Model $model) { dd('eliminar llamado'); } }Ahora, si configura el ID del sitio por sesión (por ejemplo) en un controlador con:
Sesión::set('siteId', 1)Se llamarán todas las categorías que tengan un enlace site_category con site_id=1. Como puede ver, todavía debe especificarse el método remove, por lo que, si desea finalizar este script, déjelo en los comentarios.
Puedes repetir esto con site_products o probablemente incluso con site_category_product (con algunos ajustes, si eso funciona, déjame saber a continuación 🙂).
Hola mundo
Echa un vistazo a https://github.com/AuraEQ/laravel-multi-tenant
Hola Rik,
Hasta donde sé, ese complemento no es compatible con Laravel 5. Si tienes una mejor solución, ¡házmelo saber!
Gracias, esta es una gran solución 🙂
¿Para qué sirve la función eliminar?
¿Cómo harías para terminarlo?
¿Significa esto que site_id está en cada tabla de migración/base de datos?
No, sólo los que tienen el Rasgo.