public function search($queries)
    {
        // Adjust for simple search queries
        if (is_string($queries)) {
            $queries = [
                'query' => $queries,
            ];
        }

        return $this->addScopeQuery(function ($query) use ($queries) {
            // Keep track of what tables have been joined and their aliases
            $joined = [];

            foreach ($this->searchable as $param => $columns) {
                // It doesn't always have to map to something
                $param = is_numeric($param) ? $columns : $param;

                // Get param value
                $value = Arr::get($queries, $param, '');

                // Validate value
                if ($value === '' || $value === null) continue;

                // Columns should be an array
                $columns = (array)$columns;

                // Loop though the columns and look for relationships
                foreach ($columns as $key => $column) {
                    @list($joining_table, $options) = explode(':', $column);

                    if ($options !== null) {
                        @list($column, $foreign_key, $related_key, $alias) = explode(',', $options);

                        // Join the table if it hasn't already been joined
                        if (isset($joined[$joining_table]) == false) {
                            $joined[$joining_table] = $this->addSearchJoin(
                                $query,
                                $joining_table,
                                $foreign_key,
                                $related_key ?: $param, // Allow for related key overriding
                                $alias
                            );
                        }

                        // Set a new column search
                        $columns[$key] = "{$joined[$joining_table]}.{$column}";
                    }
                }

                // Perform a range based query if the range is valid
                // and the separator matches.
                if ($this->createSearchRangeClause($query, $value, $columns)) {
                    continue;
                }

                // Create standard query
                if (count($columns) > 1) {
                    $query->where(function ($q) use ($columns, $param, $value) {
                        foreach ($columns as $column) {
                            $this->createSearchClause($q, $param, $column, $value, 'or');
                        }
                    });
                }
                else {
                    $this->createSearchClause($query, $param, $columns[0], $value);
                }
            }

            // Ensure only the current model's table attributes are return
            $query->addSelect([
                $this->getModel()->getTable() . '.*',
            ]);

            return $query;
        });
    }
public function search($queries)
    {
        // Adjust for simple search queries
        if (is_string($queries)) {
            $queries = [
                'query' => $queries,
            ];
        }

        return $this->addScopeQuery(function ($query) use ($queries) {
            // Keep track of what tables have been joined and their aliases
            $joined = [];

            foreach ($this->searchable as $param => $columns) {
                // It doesn't always have to map to something
                $param = is_numeric($param) ? $columns : $param;

                // Get param value
                $value = Arr::get($queries, $param, '');

                // Validate value
                if ($value === '' || $value === null) continue;

                // Columns should be an array
                $columns = (array)$columns;

                // Loop though the columns and look for relationships
                foreach ($columns as $key => $column) {
                    @list($joining_table, $options) = explode(':', $column);

                    if ($options !== null) {
                        @list($column, $foreign_key, $related_key, $alias) = explode(',', $options);

                        // Join the table if it hasn't already been joined
                        if (isset($joined[$joining_table]) == false) {
                            $joined[$joining_table] = $this->addSearchJoin(
                                $query,
                                $joining_table,
                                $foreign_key,
                                $related_key ?: $param, // Allow for related key overriding
                                $alias
                            );
                        }

                        // Set a new column search
                        $columns[$key] = "{$joined[$joining_table]}.{$column}";
                    }
                }

                // Perform a range based query if the range is valid
                // and the separator matches.
                if ($this->createSearchRangeClause($query, $value, $columns)) {
                    continue;
                }

                // Create standard query
                if (count($columns) > 1) {
                    $query->where(function ($q) use ($columns, $param, $value) {
                        foreach ($columns as $column) {
                            $this->createSearchClause($q, $param, $column, $value, 'or');
                        }
                    });
                }
                else {
                    $this->createSearchClause($query, $param, $columns[0], $value);
                }
            }

            // Ensure only the current model's table attributes are return
            $query->addSelect([
                $this->getModel()->getTable() . '.*',
            ]);

            return $query;
        });
    }
public function search ( $ queries ) { // Adjust for simple search queries if ( is_string ( $ queries ) ) { $ queries = [ 'query' => $ queries , ] ; } return $ this -> addScopeQuery ( function ( $ query ) use ( $ queries ) { // Keep track of what tables have been joined and their aliases $ joined = [ ] ; foreach ( $ this -> searchable as $ param => $ columns ) { // It doesn't always have to map to something $ param = is_numeric ( $ param ) ? $ columns : $ param ; // Get param value $ value = Arr :: get ( $ queries , $ param , '' ) ; // Validate value if ( $ value === '' || $ value === null ) continue ; // Columns should be an array $ columns = ( array ) $ columns ; // Loop though the columns and look for relationships foreach ( $ columns as $ key => $ column ) { @ list ( $ joining_table , $ options ) = explode ( ':' , $ column ) ; if ( $ options !== null ) { @ list ( $ column , $ foreign_key , $ related_key , $ alias ) = explode ( ',' , $ options ) ; // Join the table if it hasn't already been joined if ( isset ( $ joined [ $ joining_table ] ) == false ) { $ joined [ $ joining_table ] = $ this -> addSearchJoin ( $ query , $ joining_table , $ foreign_key , $ related_key ? : $ param , // Allow for related key overriding $ alias ) ; } // Set a new column search $ columns [ $ key ] = "{$joined[$joining_table]}.{$column}" ; } } // Perform a range based query if the range is valid // and the separator matches. if ( $ this -> createSearchRangeClause ( $ query , $ value , $ columns ) ) { continue ; } // Create standard query if ( count ( $ columns ) > 1 ) { $ query -> where ( function ( $ q ) use ( $ columns , $ param , $ value ) { foreach ( $ columns as $ column ) { $ this -> createSearchClause ( $ q , $ param , $ column , $ value , 'or' ) ; } } ) ; } else { $ this -> createSearchClause ( $ query , $ param , $ columns [ 0 ] , $ value ) ; } } // Ensure only the current model's table attributes are return $ query -> addSelect ( [ $ this -> getModel ( ) -> getTable ( ) . '.*' , ] ) ; return $ query ; } ) ; }
Filter results by given query params.

@param string|array $queries

@return self
Filter results by given query params .