考虑这个代码
$amUser = User::where('status',1)->get();
$data=[];
foreach($amUser as $a){
$salescalls = $a->salesCall();
if (isset($request->corporate_name))
{
$salescalls=$salescalls->where('corporate_name','like','%'.$request->corporate_name.'%');
}
if (isset($request->start_date))
{
$salescalls=$salescalls->whereDate('sales_calls.created_at','>=',$request->start_date);
}
if (isset($request->end_date))
{
$salescalls=$salescalls->whereDate('sales_calls.created_at','<=',$request->end_date);
}
$data[$a->id]=$salescalls->get();
$grandTotal['sum']+=$salescalls->count();
}
正如您所见,它将在每个循环上执行salesCall()查询,并产生n+1问题,但如果我急于加载$amUser->load('salesCall')
,我无法执行whereDate
query,因此我的策略是构建所有where条件,然后填充所有用户id,然后在一次执行中将它们组合在一起,但我不知道如何填充所有这些where条件,并在以后调用它们.怎么做或者有什么建议?