diff --git a/src/Http/Livewire/LivewireDatatable.php b/src/Http/Livewire/LivewireDatatable.php index 5e8f2e19..59192ddc 100644 --- a/src/Http/Livewire/LivewireDatatable.php +++ b/src/Http/Livewire/LivewireDatatable.php @@ -716,7 +716,6 @@ public function defaultSort() public function getSortString($dbtable) { $column = $this->freshColumns[$this->sort]; - switch (true) { case $column['sort']: return $column['sort']; @@ -730,6 +729,10 @@ public function getSortString($dbtable) return Str::before($column['select'][0], ' AS '); break; + case is_object($column['select']): + return Str::before($column['select']->getValue(DB::connection()->getQueryGrammar()), ' AS '); + break; + case $column['select']: return Str::before($column['select'], ' AS '); break; @@ -1356,10 +1359,13 @@ public function addGlobalSearch() foreach ($this->getColumnFilterStatement($i) as $column) { $query->when(is_array($column), function ($query) use ($search, $column) { foreach ($column as $col) { - $query->orWhereRaw('LOWER(' . (Str::contains(mb_strtolower($column), 'concat') ? '' : $this->tablePrefix) . $col . ') like ?', '%' . mb_strtolower($search) . '%'); + $query->orWhereRaw('LOWER(' . (Str::contains(mb_strtolower($column->getValue(DB::connection()->getQueryGrammar())), 'concat') ? '' : $this->tablePrefix) . $col . ') like ?', '%' . mb_strtolower($search) . '%'); } }, function ($query) use ($search, $column) { - $query->orWhereRaw('LOWER(' . (Str::contains(mb_strtolower($column), 'concat') ? '' : $this->tablePrefix) . $column . ') like ?', '%' . mb_strtolower($search) . '%'); + $stringColumn = is_string($column) + ? $column + : $column->getValue(DB::connection()->getQueryGrammar()); + $query->orWhereRaw('LOWER(' . (Str::contains(mb_strtolower($stringColumn), 'concat') ? '' : $this->tablePrefix) . $stringColumn . ') like ?', '%' . mb_strtolower($search) . '%'); }); } }); @@ -1477,7 +1483,10 @@ public function addTextFilters() $query->orWhere(function ($query) use ($index, $value) { foreach ($this->getColumnFilterStatement($index) as $column) { $column = is_array($column) ? $column[0] : $column; - $query->orWhereRaw('LOWER(' . $this->tablePrefix . $column . ') like ?', [mb_strtolower("%$value%")]); + $columnString = is_string($column) + ? $column + : $column->getValue(DB::connection()->getQueryGrammar()); + $query->orWhereRaw('LOWER(' . $this->tablePrefix . $columnString . ') like ?', [mb_strtolower("%$value%")]); } }); }