2016-03-23 35 views
0

Ich bin neu in Laravel und habe Probleme mit Selbstbezüglichkeit in eloquent. Ich habe Tabelle users mit Feldern id und referrer, wobei referrer Fremdschlüssel für Tabelle Benutzer ist (jeder Benutzer hat einen Referrer, der auch Benutzer ist). Und Tabelle invoice hat Beziehung zu Benutzern.Laravel Eloquent Selbst-Beziehungen

Ich möchte alle Rechnungen für Benutzer und Referrer erhalten.

Im Modell habe ich Beziehungen:

public function referrer() 
    { 
     return $this->hasOne('User', 'referrer'); 
    } 

    public function referral() 
    { 
     return $this->belongsTo('User','id'); 
    } 

    public function invoice() 
    { 
     return $this->hasMany('invoice', 'user_id'); 
    } 

Und query:

$this->model->with(['invoice']) 
     ->with(['referrer'=> function($q) 
     { 
      $q->with(['invoice']); 
      }]); 

}]); 

Aber diese Abfrage gibt mir Benutzer und ihre Rechnungen aber nicht zurück Referrer nur leere Array-Schlüssel referrer =>

Aktualisiert

ich ändern Beziehungen:

public function referrer() 
    { 
     return $this->hasOne('User', 'referrer'); 
    } 

    public function referral() 
    { 
     return $this->belongsTo('User','referrer'); 
    } 

    public function invoice() 
    { 
     return $this->hasMany('invoice', 'user_id'); 
    } 

Und jetzt Dumping Ergebnis sehe ich Referrer Beziehung, aber wenn ich zu bekommen $user->referrer versuchen, bekam ich Referrer-ID nur statt Referrer Objekt

Antwort

2

Versuchen Sie folgendes:

public function referrer() 
{ 
    return $this->hasOne('App\User', 'referrer', 'id'); 
} 

public function referral() 
{ 
     return $this->belongsTo('App\User','id','referrer'); 
} 
+0

Vielen Dank für Antwort, aber schon versucht, hat nicht funktioniert. –

0

So endlich habe ich eine Lösung gefunden.

Relations:

public function referrerBelong() 
    { 
     return $this->belongsTone('User', 'referrer'); 
    } 

    public function referral() 
    { 
     return $this->hasOne('User','referrer'); 
    } 

    public function invoice() 
    { 
     return $this->hasMany('invoice', 'user_id'); 
    } 

Beziehung so sein sollte, ändere ich Namen referrerBelong, weil ich Referrer Spalte haben und es Konflikte machen und Referrer-ID statt Referrer-Objekt zurück.

Abfrage:

$this->model->with(['invoice']) 
     ->with(['referrerBelong'=> function($q) 
     { 
      $q->with(['invoice']); 
      }]); 

}]); 

Und in der Steuerung können Sie Referrer Objekt erhalten $user-referrerBelong und $user-referrer mit Referrer-ID zu bekommen.

Antwort war hier: http://laravel.io/forum/01-22-2015-eloquent-belongsto-not-returning-relationships