为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
暮色呼如 2021-10-22 15:26:16
我正在尝试为代理系统上的候选人查找特定合规项目的数量。当我使用 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');

        });

}


查看完整回答
反对 回复 2021-10-22
  • 1 回答
  • 0 关注
  • 197 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信