Laravel 5: enkel konfiguration av multi-tenant/multi-site modell (många-till-många-relationer täcks också)

Laravel multi site multi hyresgäst navigeringsfält illusatrationLaravel 5 är en helt ny version av det populära ramverket. Tyvärr finns det inga bra multi-tenant-inställningar för Laravel 5 än. Det är därför jag hade bestämt mig för att skapa min egen enkla version också, baserad på Talande globala omfattningar.

I mitt fall ville jag ha en webbplatstabell, med kategorier som har många till många relationer. Så som:

webbplatser
id | namn

kategorier
id | namn

site_category
id | site_id | kategori_id

Så den här tabellstrukturen är en många till många relation. Med denna inställning kan du skapa en multi-site setup med olika kategorier. Webbplats A har kategori 1 och 2, webbplats B har kategori 3 osv. Den definieras i modellen enligt följande:

App\Site.php

belongsToMany('App\Category', 'site_category'); } }

Och kategorin som:

App\Category.php

belongsToMany('App\Site', 'site_category'); }

Observera att denna kategori har egenskapen TenantableTrait tilldelad. Det är som:

App\Traits\TenantableTrait.php

<?php namespace App\Traits;

use App\TenantScope;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\ModelNotFoundException;

trait TenantableTrait {

    /**
     * Boot the tenantable trait for the model
     *
     * @return void
     */
    public static function bootTenantableTrait()
    {
        static::addGlobalScope(new TenantScope);
    }

}

Och slutligen, glöm inte det globala Eloquent-omfattningen:

App\TenantScope.php

whereHas('sites', function($query) use($siteId) { $query->where('sites.id', $siteId); }); } } /** * Ta bort omfånget från den givna Eloquent-frågebyggaren. * * @param \Illuminate\Database\Eloquent\Builder $builder * @param \Illuminate\Database\Eloquent\Model $model * @return void */ public function remove(Builder $builder, Model $model) { called'('remove) } }

Nu, om du ställer in plats-id efter session (t.ex.) i en kontroller med:

Session::set('siteId', 1)

A alla kategorier som har en site_category-länk med site_id=1 kommer att anropas. Som du ser måste borttagningsmetoden fortfarande specificeras, så om du vill avsluta det här skriptet, lämna det i kommentarerna.

Du kan upprepa detta med site_products eller förmodligen till och med site_category_product (med lite finjustering, om det fungerar, låt mig veta nedan 🙂 ).

Senast uppdaterad 30 mars 2015

6 reaktioner på ”Laravel 5: simple multi-tenant/multi-site model setup (many-to-many relation covered as well)”

Lämna en kommentar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

sv_SESvenska
Bläddra till toppen