/** * @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; } }); }
/** * 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); }