0

私はLaravelが初めてで、雄弁な自己関係に問題があります。usersフィールドidとを持つテーブルがありますreferrer。ここで、referrerはテーブル ユーザーへの外部キーです (各ユーザーには、ユーザーでもあるリファラーが 1 つあります)。また、テーブル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 に変更します。これは、リファラー列があり、競合が発生し、リファラー オブジェクトの代わりにリファラー 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

于 2016-03-24T09:41:14.460 に答える