0

我是 Laravel 的新手,在口才方面存在自我关系问题。我有users带有字段id和的表,表用户的外键referrer在哪里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而不是推荐人对象

4

2 回答 2

2

试试这个:

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

public function referral()
{
      return $this->belongsTo('App\User','id','referrer');
}
于 2016-03-24T00:18:24.603 回答
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,因为我有referrer 列,它会产生冲突并返回referrer id 而不是referrer 对象。

询问:

  $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

于 2016-03-24T09:41:14.460 回答