2014-10-07 9 views
8

Ich muss die ID der Pivot-Tabelle als Fremdschlüssel in einer anderen Tabelle verwenden.Laravel Eloquent - Verwendung der ID der Pivot-Tabelle als Fremdschlüssel in einer anderen Tabelle

zum Beispiel ich habe folgende Tabellen:

users: id, username, ... 

places: id, placename, lat, lng, ... 

place_user: id, user_id, place_id 

routes: place_user_id, lat, lng, inserted_at. 

so, wenn der Benutzer sagt, dass ich an diesem Ort werde, habe ich einen neuen Eintrag in place_user Tabelle und starten Sie die Route protokollieren er um dorthin zu gelangen. So habe ich für jeden place_user-Eintrag viele Einträge in der routes-Tabelle.

Was ist die richtige Art, diese Art von Beziehung mit eloquent zu tun? Soll ich ein Modell für die Pivot-Tabelle erstellen? https://github.com/laravel/framework/issues/2093#issuecomment-39154456 und hat einen Kommentar es https://github.com/laravel/framework/issues/2093#issuecomment-58187802

Anregungen geschätzt wird: mein Problem durch die folgende Lösung, aber ohne Glück

Ich habe versucht, zu lösen.

+0

Wenn ich richtig verstehe, Sie wollen eine Beziehung zwischen "Benutzern" und "Orten" unter Verwendung der Tabelle "place_user". Wofür ist die 'routes' Tabelle? – Jerodev

+0

Ich habe viele zu viele Beziehung zwischen Benutzern und Orten, und eins zu viele Beziehung zwischen Routen und place_user Beziehungstabelle. – KoKo

+0

Sie müssen ein zusätzliches Modell für Ihre Pivot-Tabelle verwenden, ein erweitertes 'Model' (' Eloquent') nicht 'Pivot'. 'Pivot' hat Konstruktoren, die es unmöglich machen zu arbeiten. Wenn Sie die Eigenschaft 'pivot' (im Kontext einer Relation) verwenden müssen, benötigen Sie auch nur für diesen Fall ein benutzerdefiniertes Pivot-Modell (extending' Pivot'). –

Antwort

10

Nach vielen Suche und verschiedene Lösungen versucht, kam ich auf die folgende Lösung:

Benutzermodell:

class User extends \Eloquent { 
    public function places() { 
     return $this->hasMany('PlaceUser')->with('Place'); 
    } 
} 

Platz Modell:

class Place extends \Eloquent { 
    public function users() { 
     return $this->hasMany('PlaceUser')->with('User'); 
    } 
} 

PlaceUser Modell:

Ich habe Name Route zu Fußabdruck geändert, um Probleme mit der Route Klasse in Laravel zu vermeiden.

Fußabdruck Modell:

class Footprint extends \Eloquent { 
    public function place_user() 
    { 
     return $this->belongsTo('PlaceUser'); 
    } 
} 

Am Ende habe ich Struktur bekommen, wo ich verschiedene Anfragen wie machen kann:

// gets all places with corresponding pivot table entries and users table entries  
Place::with('users')->get(); 
// get user with id=1 including corresponding pivot table entries and places table entries 
User::with('places')->find(1); 
// get footprint of the user 
$user->places->get(0)->footprints 

hoffe, das hilft

Verwandte Themen