Laravel对儿童的Eloquent过滤器

时间:2018-02-24 16:51:45

标签: 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();

但是,我让所有签订合同的客户都满足条件(invoice_next = $ this-> invoice.next),但所有合同都不符合条件。

因此过滤客户的工作,但我得到所有客户合同而不是只有到期的合同。我在哪里弄错了?

似乎"其中"子查询中的条件仅适用于客户,但不会过滤子项(合同)。

感谢任何正确方向的暗示。

问候 eXe

1 个答案:

答案 0 :(得分:2)

试试这个:

$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();