Laravel 5.8 withCount() 忽略我的 where 语句

我正在尝试为代理系统上的候选人查找特定合规项目的数量。


当我使用 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);

            },

        ]);


暮色呼如
浏览 198回答 1
1回答

鸿蒙传说

我可能是错的,但我认为这可能与你们关系中的附加条款有关。我建议嵌套这些子句,以便它们不会与您稍后添加的子句冲突:public function complianceItemsActive(){&nbsp; &nbsp; return $this->hasMany('App\CandidateComplianceItem', 'candidate_id', 'id')&nbsp; &nbsp; &nbsp; &nbsp; ->where(function ($query) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $query->where('valid_until', '>=', date('Y-m-d'))->orWhereNull('valid_until');&nbsp; &nbsp; &nbsp; &nbsp; });}
打开App,查看更多内容
随时随地看视频慕课网APP