Laravel Eloquent 自关系
Laravel Eloquent self relations
我是 Laravel 的新人,在 eloquent 的自我关系有问题。
我有 table users
字段 id
和 referrer
,其中 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
我是 Laravel 的新人,在 eloquent 的自我关系有问题。
我有 table users
字段 id
和 referrer
,其中 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