Laravel Eloquent самоотношения

Я новичок в 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, я получил просто идентификатор реферера вместо объекта реферера


person Bogdan Dubyk    schedule 23.03.2016    source источник


Ответы (2)


Попробуй это:

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

public function referral()
{
      return $this->belongsTo('App\User','id','referrer');
}
person Dănuţ Avădănei    schedule 24.03.2016

Итак, наконец, я нашел решение.

Отношения:

  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

person Bogdan Dubyk    schedule 24.03.2016