我是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而不是引用者对象
答案 0 :(得分:2)
试试这个:
public function referrer()
{
return $this->hasOne('App\User', 'referrer', 'id');
}
public function referral()
{
return $this->belongsTo('App\User','id','referrer');
}
答案 1 :(得分: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