2016-10-17 5 views
0

möchte ich wissen, wie sich die Beziehungen zwischen den Tabellen zu machen:Komplexe Beziehungen in der Datenbank (mit Laravel)

Ich habe einen shops Tisch und eine users Tisch.
Ich möchte mit der users Tabelle verknüpfen: Geschäfte (ID) UND Bereich (das ist eine Gruppe von Geschäften).
Ich weiß nicht, wie man das auf eine schöne und richtige Weise macht.

beispielsweise in einer sehr komplexen Weise können wir haben:

Bereich A enthält [Bereich B (3 Shops) und die Fläche C (1 shop)] und 1 Geschäft: insgesamt 5 Geschäften.
John ist assoziieren mit der Area A, Area X und 3 anderen Geschäften (keine Fläche).

Wie kann ich das in der Datenbank darstellen? Es ist wie eine rekursive Sache :(

Dank durch Voraus

+0

Ich würde diese Tabellen erstellen: USER, AREA, SHOP, AREA_TO_SHOP, AREA_TO_USER, SHOP_TO_USER – Daan

+0

Ich denke, Sie möchten das verschachtelte Set-Muster für die Bereiche Tabelle implementieren, die Ihnen eine Struktur, die mehrere verschachtelte Bereiche gehen wird so tief wie du brauchst. https://github.com/etrepat/baum Verwenden Sie das, sollten Sie nur eine "Benutzer" -Tabelle, "Bereiche" Tabelle und "Shops" -Tabelle benötigen. – user3158900

Antwort

0

Sie würden vermutlich die folgenden Tabellen haben wollen:

users 
    - id 
    - username 

shops 
    - id 
    - name 

areas 
    - id 
    - name 
    - parent_id 

user_shop 
    - user_id 
    - shop_id 

area_shop 
    - shop_id 
    - area_id 

Dann gilt für Ihr Beispiel könnte eine Zeile wie

aussehen
users 
    id: 1 
    username: jappleseed 

shops 
    id: 1 
    name: some shop name 

    id: 2 
    name: some other shop name 

areas 
    id: 1 
    name: Area A 
    parent_id: null 

    id: 2 
    name: Area B 
    parent_id: 1 

    id: 3 
    name: Area C 
    parent_id: 1 

area_shop 
    area_id: 2 
    shop_id: 1 

    area_id: 2 
    shop_id: 2 

Dann könnten Sie Ihre Beziehung für verschachtelte Bereiche wie definieren:

class Area extends Model { 

    /** 
    * Parent Area 
    */ 
    public function parent_area() 
    { 
     return $this->belongsTo('Area', 'parent_id'); 
    } 

    /** 
    * Child Areas 
    */ 
    public function child_areas() 
    { 
     return $this->hasMany('Area', 'parent_id', 'id'); 
    } 
} 

Die anderen Beziehungen sollten ziemlich geradlinig sein.

Dies ist nicht getestet und könnte ein wenig zwicken, aber die übergeordnete Idee sollte Sie dorthin bringen. Andernfalls würde auch die Verwendung einer vorkompilierten Bibliothek für verschachtelte Sets funktionieren.