searchable_columns == null) { return null; } $searchableColumns = array_map(function ($column) { return DBHelper::getTable($this->getTable()).".`$column`"; }, $this->searchable_columns); $queryString = $this->buildQuery($searchableColumns, $needle); $builder->whereRaw(DBHelper::getTable($this->getTable()).".`account_id` = $accountId") ->whereRaw("( $queryString )") ->orderBy($orderByColumn, $orderByDirection); if ($sortOrder) { $builder->sortedBy($sortOrder); } $builder->select(array_map(function ($column) { return "{$this->getTable()}.$column"; }, $this->return_from_search)); return $builder; } /** * Build a query based on the array that contains column names. * * @param array $array * @param string $searchTerm * @return string */ private function buildQuery(array $array, string $searchTerm): string { $first = true; $queryString = ''; $searchTerms = explode(' ', $searchTerm); foreach ($searchTerms as $searchTerm) { $searchTerm = DBHelper::connection()->getPdo()->quote('%'.$searchTerm.'%'); foreach ($array as $column) { if ($first) { $first = false; } else { $queryString .= ' OR '; } $queryString .= $column.' LIKE '.$searchTerm; } } return $queryString; } }