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。
我的数据库中有默认的 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。