/** * @param QueryBuilder $queryBuilder * @param ResourceFilter $filter */ public function paginateQueryBuilder($queryBuilder, $filter) { if ($filter->hasPageSize()) { $queryBuilder->setMaxResults($filter->getPageSize()); if ($filter->hasPageNumber()) { $offset = $filter->getPageSize() * ($filter->getPageNumber() - 1); $queryBuilder->setFirstResult($offset); } } }
public function filterQueryBuilder(ResourceFilter $filter, $collection, $queryBuilder = null, $associatedTableName = null) { // TODO: Maybe find a better way to get the table name $tableName = App::make($collection->getEntityClassName())->getTable(); if (is_null($queryBuilder)) { $queryBuilder = DB::table($tableName); } if ($filter->hasSearch()) { $queryBuilder->orWhere(function ($query) use($filter, $collection) { foreach ($collection->getFields() as $field) { if ($field->getField() == $collection->getIdentifier() || $field->getType() == 'String') { // Test for a search with a like rather than a basic equal // $query->orWhere($field->getField(), '=', $filter->getSearch()); $query->orWhere($field->getField(), 'like', '%' . $filter->getSearch() . '%'); } } }); } if ($filter->hasFilters()) { foreach ($filter->getFilters() as $newfilter) { $fieldName = $newfilter->getFieldName(); $filterValue = $newfilter->getFilterString(); if ($newfilter->isDifferent()) { $queryBuilder->where($fieldName, '!=', $filterValue); } elseif ($newfilter->isGreaterThan()) { $queryBuilder->where($fieldName, '<', $filterValue); } elseif ($newfilter->isLowerThan()) { $queryBuilder->where($fieldName, '>', $filterValue); } elseif ($newfilter->isContains() || $newfilter->isStartsBy() || $newfilter->isEndsBy()) { if ($newfilter->isContains() || $newfilter->isStartsBy()) { $filterValue = $filterValue . '%'; } if ($newfilter->isContains() || $newfilter->isEndsBy()) { $filterValue = '%' . $filterValue; } $queryBuilder->where($fieldName, 'like', $filterValue); } elseif ($newfilter->isPresent()) { $queryBuilder->whereNotNull($fieldName); } elseif ($newfilter->isBlank()) { $queryBuilder->where(function ($query) use($fieldName) { $query->whereNull($fieldName); $query->orWhere($fieldName, '=', ''); }); } else { $queryBuilder->where($fieldName, '=', $filterValue); } } } if ($filter->hasSortBy()) { if (is_null($associatedTableName)) { $queryBuilder->orderBy($filter->getSortBy(), $filter->getSortOrder()); } else { $queryBuilder->orderBy($associatedTableName . '.' . $filter->getSortBy(), $filter->getSortOrder()); } } return $queryBuilder; }
public function testSearch() { $rf = new ResourceFilter(array('search' => 3)); $this->assertTrue($rf->hasSearch()); $this->assertEquals(3, $rf->getSearch()); }