Laravel Eloquent自我关系

时间:2016-03-23 22:01:04

标签: laravel eloquent self-reference self-referencing-table

我是Laravel的新人,并且在雄辩中对自我关系有疑问。 我的表users包含字段idreferrer,其中referrer是表用户的外键(每个用户都有一个引荐来源,也是用户)。表invoice与用户有关系。

我想获取用户和推荐人的所有发票。

在模特中我建立了关系:

   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时,我只获得了引用者ID而不是引用者对象

2 个答案:

答案 0 :(得分:2)

试试这个:

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

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

答案 1 :(得分: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,因为我有引用列,它会产生冲突并返回引用ID而不是引用对象。

<强>查询:

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

 }]);

在控制器中,您可以使用$user-referrerBelong$user-referrer获取引荐来源对象以获取引荐来源ID。

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