仅当关系查询计数大于 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)