在我的控制器中,我写了以下代码
$usersCount = User::where('activated', '=', 1)->where('group_id', '=', 1)->where('availability_date', '<=', $opportunity_date)->count();
$locations_array_result = explode(",",$locations_array_result);
foreach ($locations_array_result as $param)
{
$usersCount = $usersCount->whereHas('location', function($q) use($param){
$q->where('location_id', '=', $param );
});
}
此代码给出以下错误 在非对象上调用成员函数whereHas() 任何人都可以帮我找出我做错了什么!!!
答案 0 :(得分:0)
$usersCount
已经是您样本第一行的数字。
您希望在foreach循环中将$usersCount->whereHas
替换为User::whereHas
。
答案 1 :(得分:0)
在这里采取非常疯狂的猜测,我认为你需要让所有用户都满足这些要求
->where('group_id', '=', 1)->where('availability_date', '<=', $opportunity_date)
加上一个location_id值,该值存在于名为$ locations_array_result
的数组中如果是这种情况,这就是您所需要的:
User::where('activated', '=', 1)->where('group_id', '=', 1)->where('availability_date', '<=', $opportunity_date)->whereIn('location_id', $locations_array_result)->get();
EDIT 根据下面的评论,我假设用户与位置(在您的模型中定义)有很多关系,所以eager loading然后使用带回调的条件应该完成这项工作:
$users = User::where('activated', '=', 1)
->where('group_id', '=', 1)
->where('availability_date', '<=', $opportunity_date)
->with(array('location' => function($query) use ($locations_array_result)
{
$query->whereIn('location_id', $locations_array_result);
}))->get();