Laravel 5: eenvoudige multi-tenant/multi-site modelconfiguratie (ook veel-op-veel-relatie gedekt)

Laravel multi-site multi-tenant navigatiebalkillusatratieLaravel 5 is een gloednieuwe versie van het populaire framework. Helaas zijn er nog geen goede multi-tenant setups voor Laravel 5. Daarom heb ik besloten om ook mijn eigen simpele versie te maken, gebaseerd op Welsprekende globale scopes.

In mijn geval wilde ik een sites tabel, met categorieën die een many-to-many relatie hebben. Dus zoiets als:

locaties
id | naam

categorieën
id | naam

site_categorie
id | site_id | categorie_id

Deze tabelstructuur is dus een many-to-many-relatie. Met deze opstelling kunt u een multi-site-opstelling maken met verschillende categorieën. Site A heeft categorieën 1 en 2, Site B heeft categorie 3, etc. Het is in het model als volgt gedefinieerd:

App\Site.php

behoortToMany('App\Categorie', 'site_categorie'); } }

En de categorie zoals:

App\Categorie.php

behoortToMany('App\Site', 'site_categorie'); }

Let op dat deze categorie de trait TenantableTrait toegewezen heeft gekregen. Dat is zoiets als:

App\Traits\TenantableTrait.php

En vergeet ten slotte de wereldwijde reikwijdte van Eloquent niet:

App\TenantScope.php

whereHas('sites', function($query) use($siteId) { $query->where('sites.id', $siteId); }); } } /** * Verwijder de scope van de opgegeven Eloquent query builder. * * @param \Illuminate\Database\Eloquent\Builder $builder * @param \Illuminate\Database\Eloquent\Model $model * @return void */ public function remove(Builder $builder, Model $model) { dd('remove called'); } }

Als u nu de site-id per sessie (bijv.) in een controller instelt met:

Sessie::set('siteId', 1)

Alle categorieën die een site_category-link met site_id=1 hebben, worden aangeroepen. Zoals u ziet, moet de remove-methode nog worden gespecificeerd, dus als u dit script wilt afmaken, laat het dan achter in de opmerkingen.

Je kunt dit herhalen met site_products of waarschijnlijk zelfs site_category_product (met wat aanpassingen, laat het me hieronder weten als dat werkt 🙂 ).

6 gedachten over “Laravel 5: simple multi-tenant/multi-site model setup (many-to-many relation covered as well)”

Laat een reactie achter

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

nl_NLNederlands
Scroll naar boven