Laravel:按教育水平获取具有多种教育背景的用户

46qrfjad  于 2023-02-17  发布在  其他
关注(0)|答案(2)|浏览(91)

我的数据库中有默认的laravel users表和我的自定义educations表,在educations表中用户可以保存教育历史。
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雄辩?
例如,获取教育程度== 4的用户

bttbmeg0

bttbmeg01#

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

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

这里有一个文档链接。

ldioqlga

ldioqlga2#

如果关系设置正确,那么在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的教育列表,以及分配给每个教育的用户。

相关问题