仅当关系计数结果大于 0 时获取对象 [laravel]



仅当关系查询计数大于 0 时才获取数据时出现问题。

这是我的客户关系模型

class Customer extends Model
{
protected $table = 'customers';
public function contracts()
{
return $this->hasMany('AppContract');
}

这是我的合同模型

class Contract extends Model
{
public function customer()
{
return $this->belongsTo('AppCustomer');
}
}

最后,我只需要他们签约的客户

$customers = Customer::with(['contracts' => function($query)
{
$query->where('data_end','>=','2017-07-01')
->where('data_end','<=','2017-07-31') 
->where('typ','=','U') ;
}
])->paginate(10);

但是我有所有的客户。它看起来像这样:

"Customer 1"
"Customer 2"
"Customer 3"
*"Contract 1"
*"Contract 2"
*"Contract 3"
"Customer 4"
*"Contract 1"
*"Contract 2"
*"Contract 3"  
"Customer 4"  

在此示例中,我不需要客户 1、2 和 5。我怎样才能用急切的加载和末端有关系的对象来做到这一点。

在此处输入图像描述

发生这种情况,我不需要屏幕截图上有 X 的客户 - 我的意思是,我不需要从哪里查询 0 份合同的客户

使用whereHas()

$customers = Customer::with('contracts')
->whereHas('contracts', function ($q) {
$q->where('data_end','>=','2017-07-01')
->where('data_end','<=','2017-07-31') 
->where('typ', U');
})
->paginate(10);

这个查询解决了我的问题

$customers = Customer::with(['contracts' => function($query)
{
$query->where('data_end','>=','2017-07-01')
->where('data_end','<=','2017-07-31') 
->where('typ', 'U');
}
])->whereHas('contracts', function ($query) {
$query->where('data_end','>=','2017-07-01')
->where('data_end','<=','2017-07-31') 
->where('typ', 'U');
})
->paginate(10)

相关内容

  • 没有找到相关文章

最新更新