jsonSelectorPath = $jsonSelectorPath; } /** * Apply the search. * * @param \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Relations\Relation $query * @param string $search * @param string $connectionType * @param string $whereOperator * @return \Illuminate\Database\Eloquent\Builder */ public function __invoke($query, $search, string $connectionType, string $whereOperator = 'orWhere') { $path = $query->getGrammar()->wrap($this->jsonSelectorPath); $likeOperator = $connectionType == 'pgsql' ? 'ilike' : 'like'; if (in_array($connectionType, ['pgsql', 'sqlite'])) { return $query->{$whereOperator}($this->jsonSelectorPath, $likeOperator, "%{$search}%"); } return $query->{$whereOperator.'Raw'}("lower({$path}) {$likeOperator} ?", ['%'.Str::lower($search).'%']); } }