/**
  * @inheritdoc
  */
 public function filtering()
 {
     $this->query->where(function ($query) {
         $keyword = $this->setupKeyword($this->request->keyword());
         foreach ($this->request->searchableColumnIndex() as $index) {
             $column = $this->setupColumnName($index);
             if (isset($this->columnDef['filter'][$column])) {
                 $method = Helper::getOrMethod($this->columnDef['filter'][$column]['method']);
                 $parameters = $this->columnDef['filter'][$column]['parameters'];
                 $this->compileColumnQuery($this->getQueryBuilder($query), $method, $parameters, $column, $keyword);
             } else {
                 $this->compileGlobalSearch($this->getQueryBuilder($query), $column, $keyword);
             }
             $this->isFilterApplied = true;
         }
     });
 }
 /**
  * Perform global search.
  *
  * @return void
  */
 public function filtering()
 {
     $eagerLoads = $this->getEagerLoads();
     $this->query->where(function ($query) use($eagerLoads) {
         $keyword = $this->setupKeyword($this->request->keyword());
         foreach ($this->request->searchableColumnIndex() as $index) {
             $columnName = $this->getColumnName($index);
             if (isset($this->columnDef['filter'][$columnName])) {
                 $method = Helper::getOrMethod($this->columnDef['filter'][$columnName]['method']);
                 $parameters = $this->columnDef['filter'][$columnName]['parameters'];
                 $this->compileColumnQuery($this->getQueryBuilder($query), $method, $parameters, $columnName, $keyword);
             } else {
                 if (count(explode('.', $columnName)) > 1) {
                     $parts = explode('.', $columnName);
                     $relationColumn = array_pop($parts);
                     $relation = implode('.', $parts);
                     if (in_array($relation, $eagerLoads)) {
                         $this->compileRelationSearch($this->getQueryBuilder($query), $relation, $relationColumn, $keyword);
                     } else {
                         $this->compileGlobalSearch($this->getQueryBuilder($query), $columnName, $keyword);
                     }
                 } else {
                     $this->compileGlobalSearch($this->getQueryBuilder($query), $columnName, $keyword);
                 }
             }
             $this->isFilterApplied = true;
         }
     });
 }
示例#3
0
 /**
  * Perform global search.
  *
  * @return void
  */
 public function filtering()
 {
     $this->query->where(function ($query) {
         $globalKeyword = $this->request->keyword();
         $queryBuilder = $this->getQueryBuilder($query);
         foreach ($this->request->searchableColumnIndex() as $index) {
             $columnName = $this->getColumnName($index);
             if ($this->isBlacklisted($columnName)) {
                 continue;
             }
             // check if custom column filtering is applied
             if (isset($this->columnDef['filter'][$columnName])) {
                 $columnDef = $this->columnDef['filter'][$columnName];
                 // check if global search should be applied for the specific column
                 $applyGlobalSearch = count($columnDef['parameters']) == 0 || end($columnDef['parameters']) !== false;
                 if (!$applyGlobalSearch) {
                     continue;
                 }
                 if ($columnDef['method'] instanceof Closure) {
                     $whereQuery = $queryBuilder->newQuery();
                     call_user_func_array($columnDef['method'], [$whereQuery, $globalKeyword]);
                     $queryBuilder->addNestedWhereQuery($whereQuery, 'or');
                 } else {
                     $this->compileColumnQuery($queryBuilder, Helper::getOrMethod($columnDef['method']), $columnDef['parameters'], $columnName, $globalKeyword);
                 }
             } else {
                 if (count(explode('.', $columnName)) > 1) {
                     $eagerLoads = $this->getEagerLoads();
                     $parts = explode('.', $columnName);
                     $relationColumn = array_pop($parts);
                     $relation = implode('.', $parts);
                     if (in_array($relation, $eagerLoads)) {
                         $this->compileRelationSearch($queryBuilder, $relation, $relationColumn, $globalKeyword);
                     } else {
                         $this->compileQuerySearch($queryBuilder, $columnName, $globalKeyword);
                     }
                 } else {
                     $this->compileQuerySearch($queryBuilder, $columnName, $globalKeyword);
                 }
             }
             $this->isFilterApplied = true;
         }
     });
 }
 public function test_get_or_method()
 {
     $method = 'whereIn';
     $result = Helper::getOrMethod($method);
     $this->assertEquals('orWhereIn', $result);
     $method = 'orWhereIn';
     $result = Helper::getOrMethod($method);
     $this->assertEquals('orWhereIn', $result);
 }