Laravel 5 ist eine brandneue Version des beliebten Frameworks. Leider gibt es noch keine guten Multi-Tenant-Setups für Laravel 5. Deshalb habe ich beschlossen, auch meine eigene einfache Version zu erstellen, basierend auf Eloquente globale Bereiche.
In meinem Fall wollte ich eine Sites-Tabelle mit Kategorien, die eine Viele-zu-viele-Beziehung haben. Also etwa so:
Seiten
Ich würde |
Kategorien
Ich würde |
Site-Kategorie
ID | Site-ID | Kategorie-ID
Diese Tabellenstruktur ist also eine Viele-zu-viele-Beziehung. Mit diesem Setup können Sie ein Multi-Site-Setup mit unterschiedlichen Kategorien erstellen. Site A hat die Kategorien 1 und 2, Site B hat die Kategorie 3 usw. Dies ist im Modell wie folgt definiert:
App\Site.php
gehört zu vielen ('App\Kategorie', 'Site_Kategorie'); } }
Und die Kategorie wie:
App\Category.php
gehört zu vielen ('App\Site', 'Site_Kategorie'); }
Beachten Sie, dass dieser Kategorie das Merkmal TenantableTrait zugewiesen ist. Das ist etwa so:
App\Traits\TenantableTrait.php
Und vergessen Sie schließlich nicht den globalen Eloquent-Bereich:
App\TenantScope.php
whereHas('sites', function($query) use($siteId) { $query->where('sites.id', $siteId); }); } } /** * Entferne den Bereich aus dem angegebenen Eloquent-Abfrage-Generator. * * @param \Illuminate\Database\Eloquent\Builder $builder * @param \Illuminate\Database\Eloquent\Model $model * @return void */ public function remove(Builder $builder, Model $model) { dd('remove called'); } }Wenn Sie nun die Site-ID beispielsweise nach Sitzung in einem Controller mit folgendem Wert festlegen:
Sitzung::set('siteId', 1)Es werden alle Kategorien aufgerufen, die einen Site_category-Link mit Site_ID=1 haben. Wie Sie sehen, muss die Remove-Methode noch angegeben werden. Wenn Sie dieses Skript also fertigstellen möchten, hinterlassen Sie es in den Kommentaren.
Sie können dies mit site_products oder wahrscheinlich sogar site_category_product wiederholen (mit etwas Feinabstimmung, wenn das funktioniert, lassen Sie es mich unten wissen 🙂 ).
Schauen Sie sich an https://github.com/AuraEQ/laravel-multi-tenant
Hallo Rik,
Soweit ich weiß, unterstützt dieses Plugin Laravel 5 nicht. Wenn Sie eine bessere Lösung haben, lassen Sie es mich wissen!
Danke, das ist eine tolle Lösung 🙂
Wozu dient die Entfernen-Funktion?
Wie würden Sie es fertigstellen?
Bedeutet dies, dass die Site-ID in jeder Migrations-/Datenbanktabelle enthalten ist?
nein, nur diejenigen, die das Merkmal haben.