2016-03-23 151 views
0

我是Laravel的新人,在言语上有自我关系的问题。 我有表users与字段idreferrer,其中referrer是表用户的外键(每个用户有一个引用也是用户)。并且表invoice与用户有关系。Laravel雄辩的自我关系

我想获取用户和引荐来源的所有发票。

在模型中我犯了关系:

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

和查询:

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

}]); 

但此查询将返回我的用户和他们的发票,但不返回引荐只是空数组键referrer =>

更新

更改关系:

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

现在倾销结果我看到引用关系,但是当我试图让$user->referrer我只是推荐人,而不是引用对象

回答

2

试试这个:

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

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

感谢您的回答,但已经尝试过,没有工作。 –

0

所以最后我找到了解决办法。

关系:

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

关系应该是这样的,我改名字referrerBelong,因为我有引荐列,并使其冲突和恢复的推荐人,而不是引用的对象。

查询:

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

}]); 

并在控制器,你可以使用$user-referrerBelong$user-referrer获得的推荐人获得引用对象。

回答是在这里:http://laravel.io/forum/01-22-2015-eloquent-belongsto-not-returning-relationships