0

I'm new in Laravel and have problem with self relations in eloquent. I have table users with fields id and referrer, where referrer is foreign key to table users (each user have one referrer which is also users). And table invoice has relation to users.

I want to get all invoices for user and for referrer.

In model I made relations:

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

And query:

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

 }]);

But this query returns me users and their invoices but do not return referrer just empty array key referrer =>

Updated

I change relations :

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

And now dumping result I see referrer relation but when I trying to get $user->referrer I got just referrer id instead of referrer object

Bogdan Dubyk
  • 4,756
  • 7
  • 30
  • 67

2 Answers2

2

Try this:

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

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

So finally I found solution.

Relations:

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

Relation should be like that, I change name to referrerBelong, because I have referrer column and it make conflicts and return referrer id instead of referrer object.

Query:

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

 }]);

And in controller you can get referrer object using $user-referrerBelong and $user-referrer to get referrer id.

Answer was here : http://laravel.io/forum/01-22-2015-eloquent-belongsto-not-returning-relationships

Bogdan Dubyk
  • 4,756
  • 7
  • 30
  • 67