我正在尝试为代理系统上的候选人查找特定合规项目的数量。当我使用 with() 时,它返回 1 个正确的结果,但是当我使用 withCount() 时,它返回所有合规项的数量并忽略 where 语句。候选人模型:<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class Candidate extends Model{ protected $table = 'candidates'; public function complianceItemsActive() { return $this->hasMany('App\CandidateComplianceItem', 'candidate_id', 'id') ->where('valid_until', '>=', date('Y-m-d')) ->orWhereNull('valid_until'); }}控制器:<?phpnamespace App\Http\Controllers;use App\Candidate;use App\Client;use App\WorkVacancy;use Illuminate\Http\Request;class TableController extends Controller{ public function vacancyCandidateSearch(Request $request, $vacancy_id) { $vacancy = WorkVacancy::with([ 'client', 'requiredCompliance' => function ($query) { $query->leftJoin('compliance_items', 'client_compliance.compliance_id', 'compliance_items.id'); }]) ->findOrFail($vacancy_id); $required_compliances = $vacancy->requiredCompliance; $required_compliances_array = []; if (count($required_compliances) > 0) { foreach ($required_compliances as $required_compliance) { array_push($required_compliances_array, $required_compliance->compliance_id); } } // with() returns 1 result, withCount() returns them all $data = Candidate::with([ 'complianceItemsActive' => function ($q) use ($required_compliances_array) { $q->whereIn('compliance_id', $required_compliances_array); }])->withCount([ 'complianceItemsActive' => function ($q) use ($required_compliances_array) { $q->whereIn('compliance_id', $required_compliances_array); }, ]);
1 回答
鸿蒙传说
TA贡献1865条经验 获得超7个赞
我可能是错的,但我认为这可能与你们关系中的附加条款有关。我建议嵌套这些子句,以便它们不会与您稍后添加的子句冲突:
public function complianceItemsActive()
{
return $this->hasMany('App\CandidateComplianceItem', 'candidate_id', 'id')
->where(function ($query) {
$query->where('valid_until', '>=', date('Y-m-d'))->orWhereNull('valid_until');
});
}
- 1 回答
- 0 关注
- 197 浏览
添加回答
举报
0/150
提交
取消