Laravel Eloquent 自关系

Laravel Eloquent self relations

我是 Laravel 的新人,在 eloquent 的自我关系有问题。 我有 table users 字段 idreferrer,其中 referrer 是 table 用户的外键(每个用户都有一个推荐人也是用户)。 table 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']);
          }]);

 }]);

但是这个查询 return 是我的用户和他们的发票,但 return referrer 只是空数组键 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 而不是引荐来源对象

试试这个:

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

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

所以我终于找到了解决方案。

关系:

  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,因为我有 referrer 列并且它会产生冲突并且 return referrer id 而不是 referrer object。

查询:

  $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