Laravel 6。在一对多关系中获取所有没有联系人的用户

Laravel 6. Get all users who don't have contacts in one to many relationship

我正在尝试获取所有没有联系人的用户。让我们说

我的用户模型

public function contacts(){
    return $this->hasMany(Contacts::class);
}

我的联系人模型

public function user()
{
    return $this->belongsTo(User::class);
}

预期结果: 获取所有还没有联系人的用户。例如,如果 7 名用户中有 4 名在联系人 table 中有联系人,而我想获得其余 3 个用户(他们在联系人 table 中没有条目)

我试过下面的代码,但它返回所有用户,而不仅仅是没有联系人的用户

DB::table('users')
            ->select(
                'users.id',
                'users.*'
            )
            ->leftjoin('contacts','contacts.user_id','=','users.id')
            ->whereNull('contacts.user_id')
            ->get();  

我的英语不好所以请原谅语法错误。

你应该使用关系缺席

use App\User;

$noContacts = User::doesntHave('contacts')->get();

https://laravel.com/docs/6.x/eloquent-relationships#querying-relationship-absence