Esempio n. 1
0
 /**
  * @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);
         }
     }
 }
Esempio n. 2
0
 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());
 }