我正在使用laravel构建应用。
我要做的是获取具有搜索条件中指定的所有资格的用户数据,并显示用户列表。
这是我的模型结构。
用户:
id name
1 John
2 Jack
资格:
id name
11 A
12 B
13 C
Quality_User:
qualification_id user_id
11 1
11 2
12 2
13 2
如果设置搜索条件“ Quality 11,12,13”,
John只有11->未列出。
杰克具备所有资格->已列出
我想用laravel查询生成器来实现这一点,有什么办法吗?
User.php
public function qualifications()
{
return $this->belongsToMany('App\Qualification');
}
控制器
$query = App\User::query();
// other condition
// ....
// the case listed if one condition is matched
// but, this is not what I want to do
$query->whereHas(
'qualifications',
function ($query) use ($conditions) { //$conditions = [11,12,13]
$query->whereIn('qualifications.id', $qualifications);
}
);
答案 0 :(得分:2)
在您的用户模型中:
public function qualifications()
{
return $this->belongsToMany(
Qualification::class,
'qualification_user',
'user_id',
'qualification_id'
);
}
然后在控制器中,假设您具有资格ID作为数组:
$query = User::query();
foreach($qualificationIds as $id) {
$query->whereHas('qualifications', function ($q) use ($id) {
$q->where('id', $id);
});
}
$query->get();