2016-03-23 32 views
0

Laravel'de yeniyim ve eloquent ile ilişkilerinde problem yaşıyorum. id ve referrer alanlarına sahip tablo users ve referrer tablo kullanıcılarına yabancı anahtarlar var (her kullanıcının aynı zamanda kullanıcı olan bir yönlendiricisi vardır). invoice numaralı tablonun kullanıcıları ile ilişkisi vardır.Laravel Eloquent kendi kendine ilişkiler

Kullanıcı ve yönlendiren için tüm faturaları almak istiyorum.

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'); 
    } 

Ve sorguyu:

modelinde Ben ilişkileri yapılmış

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

}]); 

Ama bu sorgu beni kullanıcıları ve onların faturaları döndürür ancak anahtar yönlendiren sadece boş bir dizi döndürür yok referrer =>

Güncelleştirme

Ben ilişkilerini değiştirmek:

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'); 
    } 

Ve $user->referrer almaya çalışırken şimdi

cevap

2

bu deneyin yerine yönlendiren nesnenin sadece yönlendiren id var sonucunu damping referrerın ilişkiyi bakın ama:

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

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

teşekkürler ama zaten işe yaramadı çalıştı:

Cevap buradaydı. –

0

Sonunda çözüm buldum.

İlişkileri: referrerın sütunu var ve çatışmaları yapmak ve yönlendiren nesnenin yerine yönlendiren kimliği dönmek çünkü

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'); 
    } 

İlişkisi böyle olmalı, ben referrerBelong için değiştirin.

Sorgu:

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

}]); 

Ve denetleyicisi size yönlendirme id almak $user-referrerBelong ve $user-referrer kullanarak yönlendirme nesneyi elde edebilirsiniz. cevap için http://laravel.io/forum/01-22-2015-eloquent-belongsto-not-returning-relationships