laravel关系过滤器

时间:2020-08-28 13:32:10

标签: laravel eloquent

嗨,我与这3个模型有这种关系

客户

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Customers extends Model
{
    public $primaryKey = 'id';
    protected $fillable = [
        'contr_nom',
        'contr_cog',
        'benef_nom',
        'benef_cog',
        'email',
        'polizza',
        'targa',
        'iban',
        'int_iban',
        'cliente',
    ];

    public function claims()
        {
            return $this->hasMany(Claims::class);
        }
        
    public function refunds()
    {
        return $this->hasManyThrough(Refunds::class, Claims::class);
    }

}

索赔

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Claims extends Model
{
    public $primaryKey = 'id';
    protected $fillable = [
        'dossier',
        'date_cla',
    ];

    public function refunds()
        {
            return $this->hasMany(Refunds::class);
        }           
        
    public function customers()
        {
            return $this->belongsTo(Customers::class,'customers_id');
        }           

}

和退款

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Refunds extends Model
{
    public $primaryKey = 'id';
    protected $fillable = [
        'date_ref',
        'status_ref',
        'disactive',
    ];

    public function services()
        {
            return $this->belongsToMany(Services::class)
                ->withPivot(['services_id','services_amount','services_status']);
        }       
        
    public function claims()
        {
            return $this->belongsTo(Claims::class,'claims_id');
        }           

}

我在控制器中拥有此代码(部分代码)

    $data =  Claims::with(array('customers'=>function($query){
        $query->select('id','contr_nom','contr_cog','targa','email','gcliente');
    }))->get();

它有效,我可以获取每个档案的客户信息(父表)(我将其放入数据表中) 但是我无法基于退款表插入另一个过滤器。 我只需要显示档案文件

['status_ref', '>',4]

问题在于status_ref在退款表中

我试图做这样的事情,但没有成功

    $data =  Claims::with(array('customers'=>function($query){
        $query->select('id','contr_nom','contr_cog','targa','email','gcliente');
    }))->refunds()
    ->where('status_ref', '>',4)
     ->get();

我不明白为什么。 谢谢

1 个答案:

答案 0 :(得分:0)

您必须像这样使用whereHas

$data =  Claims::with(array('customers'=>function($query){
           $query->select('id','contr_nom','contr_cog','targa','email','gcliente');
         }))
         ->whereHas('refunds', function (Builder $query) {
           $query->where('status_ref', '>', 4);
         })
         ->get();