Laravel 关系 : 关系不 return 我问什么

Laravel relationship : relationship that does not return me what I ask

r我是laravel 7新手,还有一些小困难

我有两个表:用户和服务。这两个表有一个关系来检索用户的服务。

$users= User::with('poseur')->get();

它returns所有用户甚至那些不符合我关系条件的用户。

我在服务模型中使用范围:

public function scopePoseurs(){
    return $query->whereRaw('slug','pos')
}

我在用户模型中使用 belongsTo 关系:

public function poseur(){
  return $this->belongsTo('App\Service')->poseurs();
}

示例:我们有 2 个用户: 第一:丹尼尔有服务 slug = 'pos',
第二:Patrick 有服务 slug ='dev'

当我使用 $users=User::with('poseur')->get(); 时,我看到了 Daniel 和 Patrick。
虽然应该只有丹尼尔。

你能帮我理解一下吗?

谢谢!

with() 用于预先加载。这基本上意味着,沿着主模型,Laravel 将预加载您指定的关系。如果您有一组模型,这将特别有用。

如果你想 return 所有用户,只与 poseur 有关系,那么使用 has() 方法:

$users= User::has('poseur')->get();

还有一种叫做whereHas()的方法,它允许您为相关模型指定额外的过滤器来检查:

$users = User::whereHas('poseur', function($q){
    $q->where('created_at', '>=', '2020-01-01 00:00:00');
})->get();