我正在尝试为代理系统上的候选人查找特定合规项目的数量。
当我使用 with() 时,它返回 1 个正确的结果,但是当我使用 withCount() 时,它返回所有合规项的数量并忽略 where 语句。
候选人模型:
<?php
namespace 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');
}
}
控制器:
<?php
namespace 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);
},
]);
鸿蒙传说