首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 5.8 withCount()忽略了我的where语句

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

Stack Overflow用户
提问于 2019-07-22 21:24:48
回答 1查看 268关注 0票数 1

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

当我使用with()时,它返回1个正确的结果,但当我使用withCount()时,它返回所有遵从项的数量,并忽略where语句。

候选人模型:

代码语言:javascript
复制
<?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');
    }
}

控制器:

代码语言:javascript
复制
<?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_countcompliance_items_active):

代码语言:javascript
复制
{"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":""}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-22 21:42:15

我可能错了,但我认为这可能与你们关系中的附加条款有关。我建议嵌套这些子句,这样它们就不会与您稍后添加的子句冲突:

代码语言:javascript
复制
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');
        });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57147060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档