在laravel中的非对象上调用成员函数whereHas()

时间:2014-11-18 12:32:40

标签: php laravel-4

在我的控制器中,我写了以下代码

$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() 任何人都可以帮我找出我做错了什么!!!

2 个答案:

答案 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();