gsferro / filtereasy
Forma easy e generica de fazer filtros na model
Installs: 519
Dependents: 2
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 1
Open Issues: 0
pkg:composer/gsferro/filtereasy
README
Introdução
O FilterEasy é um pacote PHP que permite aplicar filtros em consultas de banco de dados de forma fácil e eficiente. Com ele, você pode criar consultas mais complexas e personalizadas, sem precisar escrever código SQL extenso.
Instalação
Instalação:
composer require gsferro/filtereasy
Implementação:
- 
Na Model adicione a trait do pacote:
Use FilterEasy;
 - 
O pacote se utiliza do padrão
Mass Assignmentdo Laravel para tratar os filtros, mas somente os campos do array$fillablesão considerados, com exceção dos relacionamentos, que é explicado logo abaixo. - 
Por default, todos os itens são tratados com a cláusula
where. - 
Caso seja enviado um valor contendo um
array, sera utilizado owhereIn.- Para 
array, coloque no name um[], exemplo:permission_id[]
 
 - Para 
 - 
Para verificações utilizando o operador
likeou uma verificação que force umbool, é necessário inicializar os seguintes atributos, respectivamente:/* |--------------------------------------------------- | FilterEasy |--------------------------------------------------- */ private array $likeFilterFields = [ // coloque os campos para like ]; private array $boolFilterFields = [ // coloque os campos bool ];
 - 
Busca com Datas e Hora:
- 
Para fazer verificação de periodos de data, usar os
sufixoa seguir, não precisam ser usados juntos::start:end
- Exemplos:
 - Com o 
:startserá implementadowhere('created_at', '>=', $value)created_at:start
 - Com o 
:endserá implementadowhere('updated_at', '<=', $value)updated_at:end
 
 - 
Para implementar no formulário de filtro (ou se for utilizar diretamente no controller), basta colocar o attr:
name="created_at:start"|name="updated_at:end" - 
Para implementar uma consulta como a do
whereBetween, basta colocar o mesmo campo 2x, cada uma com umsufixo- Exemplo:
 
deleted_at:start
deleted_at:end
 
- O sql gerado será assim:
where (`created_at`) >= ? and (`created_at`) <= ?
 
- Obs: Até a  
v1.1era utilizadowhereDate, porém assim não é possivel enviar também a hora, caso o campo seja um datetime. 
 - 
 - 
Para Relacionamento:
- Utilize a notação 
relationName:relationFieldo pacote incluirá o relacionamento na query. - Esta notação não precisa estar no 
$fillable, mas orelationNameprecisa ser um relacionamento implementando na model.- Exemplo:
posts:title relationName = posts relationField = title
 
 - Exemplo:
 - Caso queira utilizar o 
like, coloque orelationName:relationFieldno$likeFilterFields:private array $likeFilterFields = [ // demais campos "posts:title", ];
 
 - Utilize a notação 
 - 
Caso use
$guardedou outros campos que não estão no$fillable:- Inicialize o atributo 
$otherFilterFields:/* |--------------------------------------------------- | FilterEasy |--------------------------------------------------- */ private array $otherFilterFields = [ // coloque outros campos que não esteja no fillable ];
 - Exemplo: 
id,uuid,created_at,updated_at,deleted_ate etc. 
 - Inicialize o atributo 
 - 
Caso queria fazer um
aliasou precise com um unico paramentro pesquisar em várias colunas (muito comum em apis):- Inicialize o atributo 
$combinedFilterFields: - Exemplo:
/* |--------------------------------------------------- | FilterEasy |--------------------------------------------------- */ private array $combinedFilterFields = [ 'client' => [ 'name' => 'like', 'id' => '=', 'age' => '>', ] ];
- Nesse caso, ele verificara o valor enviado na posição 
clientdentro dorequeste ira setar na query com oorWhere; - Ex: Caso tenha enviado um request assim: 
client=123, osqlgerado sera:select * from users where (name like '123%' or id = 123 or age > 123)
 
 - Nesse caso, ele verificara o valor enviado na posição 
 
 - Inicialize o atributo 
 - 
Para implementar uma consulta utilizando
whereNullouwhereNotNull, no conceito deexistsdados na tabela, basta inicializar o atributo$nullableFilterFieldse passar o valorboolean, sendotrue|1parawhereNotNullefalse|0parawhereNull:- Inicialize o atributo 
$nullableFilterFields:/* |--------------------------------------------------- | FilterEasy |--------------------------------------------------- */ private array $nullableFilterFields = [ // coloque os campos que serão verificados se estão null ];
 - Exemplo: 
updated_at=1eremember_token=false 
select * from users where updated_at is not null and remember_token is null
 - Inicialize o atributo 
 
Recursos Adicionais
- Você não precisa sanitizar os dados antes de enviar, o pacote limpa os campos que vierem em branco (
'') enull, mas aceita o0como um valor válido, pois pode ser usado como um operadorboleano - Use o 
filterEasyRequest(), comoscope, para pegar todos os dados do request sem precisar passá-los por parâmetro. Pois ele chamara ofilterEasypasando a facaderequest()->all()como parâmetro - Se você utilizar o pacote 
prettus/l5-repositoryou qualquer outro paraRepository, recomendo criar a classeFilterEasyCriteriajá implementando ofilterEasyRequest()- Implementando assim:
 
<?php namespace App\Criteria; use Prettus\Repository\Contracts\CriteriaInterface; use Prettus\Repository\Contracts\RepositoryInterface; class FilterEasyCriteria implements CriteriaInterface { /** * Apply criteria in query repository * * @param string $model * @return mixed */ public function apply($model, RepositoryInterface $repository) { return $model->filterEasyRequest(); } }
- E para usar, bastando simplesmente:
 
public function index(): View { // set filtereasy $this->repository->pushCriteria(new FilterEasyCriteria); return view('index', [ 'model' => $this->repository, ]); }
 
Solução de Problemas
Se você encontrar algum problema ao usar o FilterEasy, verifique se:
- A consulta de banco de dados está correta.
 - Os filtros estão a ser aplicados corretamente.
 - A versão do pacote está atualizada.
 - Recursos Adicionais
 - Se você inicializou os atributos na model
 - Se você tiver um novo campo no model que não estiver listado
 - Se você tiver um relacionamento que não estiver implementado na model
 
Contribuição
Se você deseja contribuir com o FilterEasy, por favor, siga as seguintes etapas:
- Faça um fork do repositório.
 - Crie uma branch para sua contribuição.
 - Faça as alterações necessárias.
 - Envie um pull request.
 
License
O FilterEasy é licenciado sob a licença MIT. Leia o arquivo LICENSE para mais informações.
