/** * Perform column search * * @return void */ public function doColumnSearch() { $input = $this->input; $columns = $input['columns']; // if older version, set the column name to query's fields // or if new version but does not use mData support if (!$this->new_version or !$this->mDataSupport and $this->new_version) { for ($i = 0; $i < count($columns); $i++) { if (!isset($this->columns[$i])) { continue; } $columns[$i]['name'] = $this->columns[$i]; if (stripos($columns[$i]['name'], ' AS ') !== false or $columns[$i]['name'] instanceof Expression) { $columns[$i]['name'] = ''; $columns[$i]['searchable'] = false; $columns[$i]['orderable'] = false; } } } for ($i = 0, $c = count($columns); $i < $c; $i++) { if ($columns[$i]['searchable'] == "true" and !empty($columns[$i]['search']['value']) and !empty($columns[$i]['name'])) { $column = $columns[$i]['name']; $keyword = $this->setupKeyword($columns[$i]['search']['value']); // wrap column possibly allow reserved words to be used as column $column = $this->wrapColumn($column); if ($this->isCaseInsensitive()) { $this->query->whereRaw('LOWER(' . $column . ') LIKE ?', [strtolower($keyword)]); } else { $col = strstr($column, '(') ? $this->connection->raw($column) : $column; $this->query->where($col, 'LIKE', $keyword); } } } }
/** * Perform column search * * @param array $columns * @return void */ public function doColumnSearch(array $columns) { for ($i = 0, $c = count($columns); $i < $c; $i++) { if ($columns[$i]['searchable'] == "true" and !empty($columns[$i]['search']['value']) and !empty($columns[$i]['name'])) { $column = $columns[$i]['name']; $keyword = $this->setupKeyword($columns[$i]['search']['value']); // wrap column possibly allow reserved words to be used as column $column = $this->wrapColumn($column); if ($this->isCaseInsensitive()) { $this->query->whereRaw('LOWER(' . $column . ') LIKE ?', [strtolower($keyword)]); } else { $col = strstr($column, '(') ? $this->connection->raw($column) : $column; $this->query->where($col, 'LIKE', $keyword); } } } }
/** * Applies a filter scope constraints to a DB query. * @param string $scope * @param Builder $query * @return Builder */ public function applyScopeToQuery($scope, $query) { if (is_string($scope)) { $scope = $this->getScope($scope); } if (!$scope->value) { return; } $value = is_array($scope->value) ? array_keys($scope->value) : $scope->value; /* * Condition */ if ($scopeConditions = $scope->conditions) { if (is_array($value)) { $filtered = implode(',', array_build($value, function ($key, $_value) { return [$key, Db::getPdo()->quote($_value)]; })); } else { $filtered = Db::getPdo()->quote($value); } $query->whereRaw(strtr($scopeConditions, [':filtered' => $filtered])); } /* * Scope */ if ($scopeMethod = $scope->scope) { $query->{$scopeMethod}($value); } return $query; }
/** * Applies a filter scope constraints to a DB query. * @param string $scope * @param Builder $query * @return Builder */ public function applyScopeToQuery($scope, $query) { if (is_string($scope)) { $scope = $this->getScope($scope); } if (!$scope->value) { return; } switch ($scope->type) { case 'date': if ($scope->value instanceof Carbon) { $value = $scope->value; /* * Condition */ if ($scopeConditions = $scope->conditions) { $query->whereRaw(DbDongle::parse(strtr($scopeConditions, [':filtered' => $value->format('Y-m-d'), ':after' => $value->format('Y-m-d H:i:s'), ':before' => $value->copy()->addDay()->addMinutes(-1)->format('Y-m-d H:i:s')]))); } elseif ($scopeMethod = $scope->scope) { $query->{$scopeMethod}($value); } } break; case 'daterange': if (is_array($scope->value) && count($scope->value) > 1) { list($after, $before) = array_values($scope->value); if ($after && $after instanceof Carbon && $before && $before instanceof Carbon) { /* * Condition */ if ($scopeConditions = $scope->conditions) { $query->whereRaw(DbDongle::parse(strtr($scopeConditions, [':afterDate' => $after->format('Y-m-d'), ':after' => $after->format('Y-m-d H:i:s'), ':beforeDate' => $before->format('Y-m-d'), ':before' => $before->format('Y-m-d H:i:s')]))); } elseif ($scopeMethod = $scope->scope) { $query->{$scopeMethod}($after, $before); } } } break; default: $value = is_array($scope->value) ? array_keys($scope->value) : $scope->value; /* * Condition */ if ($scopeConditions = $scope->conditions) { /* * Switch scope: multiple conditions, value either 1 or 2 */ if (is_array($scopeConditions)) { $conditionNum = is_array($value) ? 0 : $value - 1; list($scopeConditions) = array_slice($scopeConditions, $conditionNum); } if (is_array($value)) { $filtered = implode(',', array_build($value, function ($key, $_value) { return [$key, Db::getPdo()->quote($_value)]; })); } else { $filtered = Db::getPdo()->quote($value); } $query->whereRaw(DbDongle::parse(strtr($scopeConditions, [':filtered' => $filtered]))); } elseif ($scopeMethod = $scope->scope) { $query->{$scopeMethod}($value); } break; } return $query; }