Skip to content

Commit

Permalink
Merge pull request #19 from syamsoul/module/allow-set-search-column
Browse files Browse the repository at this point in the history
allowed to change columns when perform search
  • Loading branch information
syamsoul authored Aug 6, 2024
2 parents 5462dff + 77ff258 commit be902db
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 6 deletions.
16 changes: 14 additions & 2 deletions src/Handler/ColumnsHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public function getArrangedColsDetails(bool $is_for_csv = false): array

$dt_cols = $this->getColumns();

$db_cols = $db_cols_initial = $db_cols_mid = $db_cols_final = $db_cols_final_clean = $formatter = [];
$db_cols = $db_cols_initial = $db_cols_mid = $db_cols_final = $db_cols_final_clean = $db_cols_for_search = $formatter = [];

foreach ($dt_cols as $key => $dt_col) {
if (isset($dt_col['db'])) {
Expand All @@ -71,11 +71,18 @@ public function getArrangedColsDetails(bool $is_for_csv = false): array
}

$db_cols_final_clean[$key] = $db_cols_final[$key];

if (isset($dt_col['db_for_search'])) {
$db_cols_for_search[$key] = $dt_col['db_for_search'];
} else {
$db_cols_for_search[$key] = $db_cols_initial[$key];
}
} else if (isset($dt_col['db_fake'])) {
$db_cols_initial[$key] = $dt_col['db_fake'] . $this->db_fake_identifier;
$db_cols_mid[$key] = $dt_col['db_fake'] . $this->db_fake_identifier;
$db_cols_final[$key] = $dt_col['db_fake'] . $this->db_fake_identifier;
$db_cols_final_clean[$key] = $dt_col['db_fake'];
$db_cols_for_search[$key] = null;
}

if (isset($dt_col['formatter'])) $formatter[$key] = $dt_col['formatter'];
Expand All @@ -92,6 +99,7 @@ public function getArrangedColsDetails(bool $is_for_csv = false): array
'db_cols_mid' => $db_cols_mid,
'db_cols_final' => $db_cols_final,
'db_cols_final_clean' => $db_cols_final_clean,
'db_cols_for_search' => $db_cols_for_search,
'formatter' => $formatter,
];

Expand All @@ -110,7 +118,11 @@ public function isSortable(array $dt_col): bool

public function isDbFake($db_col): bool
{
return strpos($db_col, $this->db_fake_identifier) !== false;
if (is_string($db_col)) {
return strpos($db_col, $this->db_fake_identifier) !== false;
}

return false;
}

public function getDtLabel(array $dt_col, string $db_col): string
Expand Down
8 changes: 4 additions & 4 deletions src/Handler/QueryHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -213,13 +213,13 @@ public function querySearch(EloquentBuilder|QueryBuilder $query): void
if (!empty($search_value)) {
$arranged_cols_details = $this->handler->columns()->getArrangedColsDetails();
$dt_cols = $arranged_cols_details['dt_cols'];
$db_cols_initial = $arranged_cols_details['db_cols_initial'];
$db_cols_for_search = $arranged_cols_details['db_cols_for_search'];

$query->where(function ($the_query) use ($dt_cols, $db_cols_initial, $search_value) {
$query->where(function ($the_query) use ($dt_cols, $db_cols_for_search, $search_value) {
$count = 0;
foreach ($db_cols_initial as $index => $e_col) {
foreach ($db_cols_for_search as $index => $e_col) {
if (empty($e_col)) continue;
if (! ($dt_cols[$index]['searchable'] ?? true)) continue;
if ($this->handler->columns()->isDbFake($e_col)) continue;

if ($count == 0) $the_query->where($e_col, 'LIKE', "%".$search_value."%");
else $the_query->orWhere($e_col, 'LIKE', "%".$search_value."%");
Expand Down

0 comments on commit be902db

Please sign in to comment.