Laravel 5 est une toute nouvelle version du framework populaire. Malheureusement, il n'existe pas encore de bonnes configurations multi-locataires pour Laravel 5. C'est pourquoi j'ai décidé de créer également ma propre version simple, basée sur Des perspectives mondiales éloquentes.
Dans mon cas, je voulais une table de sites, avec des catégories qui ont une relation plusieurs à plusieurs. Donc comme :
sites
identifiant | nom
catégories
identifiant | nom
catégorie_de_site
identifiant | identifiant_site | identifiant_catégorie
Cette structure de table est donc une relation plusieurs à plusieurs. Avec cette configuration, vous pouvez créer une configuration multisite avec différentes catégories. Le site A a les catégories 1 et 2, le site B a la catégorie 3, etc. Elle est définie dans le modèle comme suit :
Application\Site.php
appartient à beaucoup('App\Catégorie', 'catégorie_site'); } }
Et la catégorie comme :
App\Catégorie.php
appartient à plusieurs('App\Site', 'site_category'); }
Notez que cette catégorie possède le trait TenantableTrait. C'est comme ça :
App\Traits\TenantableTrait.php
Et enfin, n'oubliez pas la portée globale d'Eloquent :
Application\TenantScope.php
whereHas('sites', function($query) use($siteId) { $query->where('sites.id', $siteId); }); } } /** * Supprimer la portée du générateur de requêtes Eloquent donné. * * @param \Illuminate\Database\Eloquent\Builder $builder * @param \Illuminate\Database\Eloquent\Model $model * @return void */ public function remove(Builder $builder, Model $model) { dd('remove called'); } }Maintenant, si vous définissez l'identifiant du site par session (par exemple) dans un contrôleur avec :
Session::set('siteId', 1)Toutes les catégories qui ont un lien site_category avec site_id=1 seront appelées. Comme vous pouvez le constater, la méthode remove doit encore être spécifiée, donc si vous souhaitez terminer ce script, laissez-le dans les commentaires.
Vous pouvez répéter cela avec site_products ou probablement même site_category_product (avec quelques ajustements, si cela fonctionne, faites-le moi savoir ci-dessous 🙂 ).
Jetez un oeil à https://github.com/AuraEQ/laravel-multi-tenant
Salut Rik,
Pour autant que je sache, ce plugin ne prend pas en charge Laravel 5. Si vous avez une meilleure solution, faites-le moi savoir !
Merci, c'est une excellente solution 🙂
A quoi sert la fonction supprimer ?
Comment procéderiez-vous pour le terminer ?
Cela signifie-t-il que site_id est présent dans chaque table de migration/db ?
non, seulement ceux qui ont le trait.