我正在尝试在代理系统上查找候选人的特定合规性项目的计数。
当我使用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);
},
]);
$data = $data->paginate(10);
$data->setPath('#');
$data->view = null;
$data->count = count($data);
return \Response::JSON([
'data' => $data,
'count' => count($data),
'total' => $data->total(),
'per_page' => $data->perpage(),
'pagination' => (string)$data->links(),
]);
}
}响应(注意compliance_items_active_count和compliance_items_active):
{"data":{"current_page":1,"data":[{"id":1,"forename":"John","other_names":null,"surname":"Smith","gender":"Male","address_1":"Address1","address_2":"Address2","address_3":null,"postcode":"POST CODE","country":"England","telephone":"0987654321","mobile":"1234567890","email":"email@email.com","notes":null,"account_holder_name":null,"sort_code":null,"account_number":null,"bsrn":null,"ni_number":"123","passport_number":null,"issuing_country":null,"nok_relationship":null,"nok_name":null,"nok_telephone":null,"nok_mobile":null,"consent_accepted":1,"consent_notes":null,"candidate_details_source":null,"mode_of_travel":"Walk","travel_range":"5","min_pay":8,"payment_per":"hour","deleted":0,"created_at":"2019-07-11 13:19:43","created_by":1,"updated_at":"2019-07-22 10:31:07","updated_by":1,"compliance_items_active_count":4,"compliance_items_active":[{"id":5,"compliance_id":3,"candidate_id":1,"reference":null,"additional_info":null,"valid_until":null,"created_at":"2019-07-22 12:07:36","updated_at":"2019-07-22 12:07:36"}]}],"first_page_url":"#?page=1","from":1,"last_page":1,"last_page_url":"#?page=1","next_page_url":null,"path":"#","per_page":10,"prev_page_url":null,"to":1,"total":1},"count":1,"total":1,"per_page":10,"pagination":""}发布于 2019-07-22 21:42:15
我可能错了,但我认为这可能与你们关系中的附加条款有关。我建议嵌套这些子句,这样它们就不会与您稍后添加的子句冲突:
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');
});
}https://stackoverflow.com/questions/57147060
复制相似问题