public function search($filters, $sortBy, $sortOrder, $paginate = 1) { if ($paginate == NULL) { $paginate = true; } $table = 'groups'; $result = $this->model->leftjoin('group_user', 'group_user.group_id', '=', $table . '.id')->where(function ($query) use($filters, $sortBy, $sortOrder) { foreach ((array) $filters as $key => $temp) { if ($filters[$key]) { if ($key == 'name') { $query->whereRaw("name like '%" . $filters[$key]['item0'] . "%'"); } else { $query->whereIn($key, array($filters[$key])); } } } })->orderBy($sortBy, $sortOrder)->groupBy($table . '.id'); if ($paginate) { return $result->paginate(10, [$this->model->getTable() . '.*', DB::raw('count(group_user.group_id) as members_count')]); } else { return $result->get([$this->model->getTable() . '.*', DB::raw('count(group_user.group_id) as members_count')]); } }