我有3张桌子:
证书-所有可用的证书
Users -用户表
UserCertificates -用户拥有的证书。每条记录都有自己的ID、user_id和certificate_id外键。
现在,我有了一个证书ID数组(或者只有一个值),并且我需要获取拥有这些所选证书的所有用户。因此,如果证书I是1、4、7,我需要选择拥有所有这些证书的所有用户,而不是1、4或7。
我有工作代码,它花了我几个小时让它工作,但它看起来并不干净。有没有更干净的方法呢?
证书是$requiredCertificates _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();
}发布于 2018-03-15 18:33:33
试试这个..。
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();
}https://stackoverflow.com/questions/49295283
复制相似问题