tailflow / laravel-orion

The simplest way to create REST API with Laravel

Home Page:https://orion.tailflow.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Case-insensitive does not work with JSON field type

pakomp opened this issue · comments

commented

Hi,

An Exception will be thrown if setting search.case_sensitive = false, and having a JSON field as searchable. The field is JSON type due to it being translatable (using the package spatie/laravel-translatable).

Exception:
SQLSTATE[42883]: Undefined function: 7 ERROR: function lower(json) does not exist

I'm using Postgresql

EDIT: The problem exists on other field types as well, Orion tries to do lower() on integer columns as well

I made it work somehow:

vendor/tailflow/laravel-orion/src/Drivers/Standard/QueryBuilder.php@applySearchingToQueryL429

                    if (!$caseSensitive) {
                        if (str_contains($qualifiedFieldName, '->')) {
                            $grammar = $whereQuery->getGrammar();
                            $qualifiedFieldName = $grammar->wrap($qualifiedFieldName);

                        $whereQuery->orWhereRaw(
                            "lower({$qualifiedFieldName}) like lower(?)",
                            ['%'.$requestedSearchString.'%']
                        );
                        } else {
                        $whereQuery->orWhereRaw(
                            "lower({$qualifiedFieldName}) like lower(?)",
                            ['%'.$requestedSearchString.'%']
                        );
                        }
                    } else {
                        $whereQuery->orWhere(
                            $qualifiedFieldName,
                            'like',
                            '%'.$requestedSearchString.'%'
                        );
                    }