Laravel Eloquent 儿童过滤器

da.*_*toR 1 laravel eloquent

我有以下关系:

客户 -> hasMany(合同)

现在我想要获取所有客户,包括具有给定条件的所有合同:

$c = Customer::with('contracts','contracts.service','contracts.contractpos')
    ->whereHas('contracts', function ($query) {
        $query
        ->where('invoice_next','=',$this->invoice_next)
        ->groupBy('customer_id');
    })
    ->orderBy('company')
    ->get();
Run Code Online (Sandbox Code Playgroud)

但是,我得到了所有拥有满足条件的合同的客户 (invoice_next = $this->invoice.next ),但也得到了所有不符合条件的合同。

因此,过滤客户是可行的,但随后我会获得所有客户合同,而不仅仅是到期的合同。我哪里犯了错误?

子查询中的“where”条件似乎只适用于客户,但不能过滤子查询(合同)。

感谢您提供正确方向的任何提示。

问候 eXe

yrv*_*v16 5

尝试这个:

$c = Customer::with(['contracts' => function($query){
          $query->where('invoice_next','=',$this->invoice_next)
          ->with(['service', 'contractpos'])
          ->groupBy('customer_id');
     }])
    ->whereHas('contracts', function ($query) {
        $query->where('invoice_next','=',$this->invoice_next);            
    })
    ->orderBy('company')
    ->get();
Run Code Online (Sandbox Code Playgroud)