All Projects → jhormantasayco → laravel-searchzy

jhormantasayco / laravel-searchzy

Licence: MIT license
Package que te permite buscar y filtrar registros de Eloquent Models en Laravel de una manera simple y sencilla.

Programming Languages

PHP
23972 projects - #3 most used programming language
Blade
752 projects

Projects that are alternatives of or similar to laravel-searchzy

Eloquent Filter
This simple package helps you filter Eloquent data using query filters.
Stars: ✭ 24 (+60%)
Mutual labels:  eloquent, filter
pimpable
No description or website provided.
Stars: ✭ 102 (+580%)
Mutual labels:  eloquent, filter
eloquent-mongodb-repository
Eloquent MongoDB Repository Implementation
Stars: ✭ 18 (+20%)
Mutual labels:  eloquent, filter
Lara Eye
Filter your Query\Builder using a structured query language
Stars: ✭ 39 (+160%)
Mutual labels:  eloquent, filter
Eloquentfilter
An Eloquent Way To Filter Laravel Models And Their Relationships
Stars: ✭ 1,113 (+7320%)
Mutual labels:  eloquent, filter
Sieve
A simple, clean and elegant way to filter Eloquent models.
Stars: ✭ 123 (+720%)
Mutual labels:  eloquent, filter
Searchable
Search/filter functionality for Laravel's Eloquent models
Stars: ✭ 113 (+653.33%)
Mutual labels:  eloquent, filter
eloquent-filter
Library to form search criteria through expressions in the query string
Stars: ✭ 23 (+53.33%)
Mutual labels:  eloquent, filter
dubbox
dubbox原始版本的升级版,主要根据GitHub各路大神代码的整合
Stars: ✭ 13 (-13.33%)
Mutual labels:  filter
Camera2GLPreview
Android camera preview application using Camera2 API and OpenGL ES/Vulkan
Stars: ✭ 140 (+833.33%)
Mutual labels:  filter
go-tc
traffic control in pure go - it allows to read and alter queues, filters and classes
Stars: ✭ 245 (+1533.33%)
Mutual labels:  filter
grayscale
macOS status bar app for easily toggling the grayscale display filter
Stars: ✭ 20 (+33.33%)
Mutual labels:  filter
ULogViewer
Cross-Platform Universal Log Viewer.
Stars: ✭ 64 (+326.67%)
Mutual labels:  filter
restatapi
An R package to search and retrieve data from Eurostat database using SDMX
Stars: ✭ 14 (-6.67%)
Mutual labels:  filter
laravel-tmdb
Interact with TMDB data in your Laravel application.
Stars: ✭ 25 (+66.67%)
Mutual labels:  eloquent
react-native-logger
Async aware logger for react-native with grouping and filter feature
Stars: ✭ 20 (+33.33%)
Mutual labels:  filter
activeadmin-ajax filter
AJAX filters for ActiveAdmin
Stars: ✭ 86 (+473.33%)
Mutual labels:  filter
stream
Go Stream, like Java 8 Stream.
Stars: ✭ 60 (+300%)
Mutual labels:  filter
laravel-mass-update
Update multiple Laravel Model records, each with its own set of values, sending a single query to your database!
Stars: ✭ 65 (+333.33%)
Mutual labels:  eloquent
eloquent-has-by-join
Convert has() and whereHas() constraints to join() ones for single-result relations.
Stars: ✭ 21 (+40%)
Mutual labels:  eloquent

Laravel Searchzy

Scrutinizer Code Quality Build Status Latest Stable on Packagist Total Downloads License Sonar Cloud

Quality gate

El package te permite buscar y filtrar registros de Eloquent Models en Laravel de una manera simple y sencilla. Compatible con la versión 6, 7, 8.

Instalación

Puedes instalar el package vía composer de la siguiente manera:

composer require jhormantasayco/laravel-searchzy

Uso en los Models

Para añadir searchzy debes de hacer lo siguiente:

  1. Usar el trait Jhormantasayco\LaravelSearchzy\Searchzy en tus Models.
  2. Especificar mediante un array asociativo por medio de una propiedad o un método que retorne un array, donde se especifique las columnas que serán usadas por searchzy para la búsqueda y filtrado de los registros. Las keys del array representan el nombre de la variable que almacena la data del request y los values representan a las columnas o relaciones del Model. Para asociar una relación del Model se usa la siguiente nomenclatura (relation:column) como se describe en el siguiente ejemplo:
use Jhormantasayco\LaravelSearchzy\Searchzy;

class MyModel extends Model
{
    use Searchzy;

    /**
     * The attributes that are searchable via property.
     *
     * @var array
     */
    protected $searchable = [
        'nombre'      => 'name',
        'dni'         => 'code',
        'telefono'    => 'phone',
        'correo'      => 'email',
        'post'        => 'posts:title',
        'descripcion' => 'posts:description',
    ];

    /**
     * The attributes that are searchable via method.
     *
     * @return array
     */
    public function searchableInputs(){

        return [
            'nombre'      => 'name',
            'dni'         => 'code',
            'phone'       => 'phone',
            'email'       => 'email',
            'post'        => 'posts:title',
            'descripcion' => 'posts:description',
        ];
    }

    /**
     * The attributes that are filterable via property.
     *
     * @var array
     */
    protected $filterable = [
        'rol_id' => 'role_id',
    ];

    /**
     * The attributes that are filterable via method.
     *
     * @return array
     */
    public function filterableInputs(){

        return [
            'rol_id' => 'role_id',
        ];
    }
}

¿Propiedad o Método?

Puedes usar cualquiera de las vias que se presentan en el ejemplo, ya sea por medio de una propiedad o un método, todo funcionará sin problemas. Usa la forma con la cual te sientas más comodo.

Uso en los Controllers

Simplemente tienes que añadir el scope de searchzy en tus consultas para que se pueda realizar la búsqueda y filtrado de registros según los datos enviados en el request. Searchzy sólo trabajará con los datos cuyos nombres coincidan con lo descrito en los arrays asociativos del Model.

public function index(){

    // Obtiene los inputs del request y sus respectivos valores.
    $params = Usuario::searchzyInputs();

    // Implementación de searchzy en la consulta donde puedes seguir usando los demás métodos del Model con total normalidad.
    $oUsuarios = Usuario::withCount(['posts AS posts_count'])
                    ->with(['posts'])
                    ->searchzy()
                    ->orderBy('name')
                    ->paginate();

    return view('welcome.index', compact('params', 'oUsuarios'));
}

Uso en las Views

Para realizar la búsqueda de registros searchzy implementa una keyword que por defecto es word. La configuración se ubica en config/searchzy.php donde usted puede cambiar este valor según su necesidad.

La implementar del campo de búsqueda se realiza de la siguiente manera

<input type="text" name="{{ config('searchzy.keyword') }}" value="{{ ${config('searchzy.keyword')} }}" class="form-control" class="Buscar a un usuario por su nombre, dni, telefono, correo electrónico, titulo o descripción de sus posts">

Sí usas el package de laravelcollective/html la implementación sería la siguiente:

{!! Form::text(config('searchzy.keyword'), ${config('searchzy.keyword')}, [
    'class'       => 'form-control',
    'placeholder' => 'Buscar a un usuario por su nombre, dni, telefono, correo electrónico, titulo o descripción de sus posts'
]) !!}

Con esto ya podemos empezar a buscar nuestros registros con searchzy.

Para los campos que son filterable se recomienda implementar un select por cada elemento del array.

Ejemplo:

{!! Form::select('rol_id', UtilEnum::$ARR_ROLES, $rol_id, [
    'class'    => 'form-control',
]) !!}

Nótese que el nombre del select debe de ser igual al definido en la keys del array en el Model.

¿Qué hemos logramos con esto?

  • Evitar la sobrecarga de consultas de búsqueda (orWhere o whereHas) en los Controllers o Models del proyecto.
  • Dar un alias a las columnas y relaciones para realizar la búsqueda y filtrado de registros, evitando que cualquier persona que pudiera ver los parámetros en la url infiera el diseño y modelado de la base de datos.
  • Optimizar la consulta de búsqueda mediante el uso de subqueries generadas por el package.

Requerimientos

  • PHP 7.2 o superior.
  • Laravel 6.0 o superior.

Demo

Puedes ver una demo del package en los siguientes enlaces:

Testing

./vendor/bin/phpunit
./vendor/bin/phpcpd src
./vendor/bin/phpcs src
./vendor/bin/phpcbf src
./vendor/bin/phpstan analyse src

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email [email protected] instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].