我有3张桌子:
证书 - 所有可用证书
用户 - 用户表
UserCertificates - 用户拥有的证书。每条记录都有自己的ID,user_id和certificate_id外键。
现在,我有一个数组(或只有一个值)的证书ID,我需要获得拥有这些所选证书的所有用户。因此,如果证书ID是1,4,7我需要选择拥有所有这些证书的所有用户,而不是1 OR 4 OR 7.
我有工作代码,我花了好几个小时让它工作,但看起来并不干净。有更清洁的方法吗?
$requiredCertificates
是certificate_id的
public function getMatches(Opportunity $opportunity)
{
$requiredCertificates = $this->getRequiredCertificates($opportunity);
return User::with('certificates')
->whereHas('certificates', function ($query) use ($requiredCertificates) {
$query->select(\DB::raw('count(distinct certificate_id)'))->whereIn('certificate_id', $requiredCertificates);
}, '=', count($requiredCertificates))
->get();
}
答案 0 :(得分:0)
试试这个..
public function getMatches(Opportunity $opportunity)
{
$requiredCertificates = $this->getRequiredCertificates($opportunity);
$users = User::with('certificates');
foreach($requiredCertificates as $certificateId) {
$users->whereHas('certificates', function ($query) use ($certificateId) {
$query->where('certificate_id', $certificateId);
});
}
return $users->get();
}