Laravel:按受教育程度获取受过多种教育的用户

Laravel: get users with multiple educations by education level

我的数据库中有默认的 laravel users table 和自定义的 educations table。在 educations table 用户可以保存教育历史。

示例educations数据:

------------------------------------------------------------
id | user_id | university | speciality | finish_year | level
------------------------------------------------------------
 1 |   16    |   Boston   |  Developer |    2018     |   4 
------------------------------------------------------------
 2 |   10    |   Sinergy  |   Designer |    2014     |   4 
------------------------------------------------------------
 9 |   16    |   Sinergy  |  Economist |    2010     |   8 
------------------------------------------------------------

现在如何让用户按教育程度使用 laravel eloquent?

例如获取受教育程度 == 4 的用户

如果你的关系设置正确,那么在你的 User 模型中你应该有这样的东西:

public function educations() {
    return $this->hasMany(Education::class);
}

那么一个简单的用法就是:

User::with(['educations' => function($query) {
    $query->where('level', 4);
}])->get()->filter(function($user) {
    return $user->educations->count() > 0;
});

相反的方法是:

Education::with('user')->where('level', 4)->get();

这将为您提供级别为 4 的教育列表,以及分配给它的每个用户。

考虑到您的用户模型中有一个 educations 方法表示 HasMany 关联,您可以使用 eloquent 的 has(或 whereHas) 方法:

$users = App\User::whereHas('educations', function ($query) {
    $query->where('level', 4);
})->get();

这是 docs 的 link。