Do not speak Portuguese? Translate this site with Google or Bing Translator
Simplificando Consultas com Laravel Query Scopes

Posted on: August 05, 2024 08:57 AM

Posted by: Renato

Categories: Laravel

Views: 99

Simplificando Consultas com Laravel Query Scopes

Desenvolvedor Backend PHP (Laravel) Sênior

No desenvolvimento de aplicações Laravel, frequentemente nos deparamos com a necessidade de reutilizar consultas de banco de dados. Seja filtrando usuários ativos, selecionando produtos específicos ou qualquer outra consulta recorrente, escrever o mesmo código de consulta várias vezes pode ser tedioso e propenso a erros. Aqui, os Laravel Query Scopes entram como uma solução elegante e eficiente.

O que são Laravel Query Scopes?

Os Query Scopes permitem definir consultas comuns que você pode reutilizar em todo o modelo. Eles são métodos no modelo Eloquent que predefinem condições de consulta, que você pode chamar como parte de outras consultas Eloquent. Os Scopes vêm em duas variedades: Local Scopes e Global Scopes.

  • Local Scopes permitem definir consultas comuns que podem ser facilmente reutilizadas dentro do modelo. Eles são adicionados à consulta como métodos encadeados.
  • Global Scopes permitem definir condições de consulta que são automaticamente aplicadas a todas as consultas para um determinado modelo.

Exemplo de Local Scope

Suponha que você tenha um modelo User e frequentemente precisa filtrar usuários ativos. Ao invés de repetir a condição where('status', '=', 'active') em várias consultas, você pode definir um Local Scope:

class User extends Model
{
    /**
     * Scope a query to only include active users.
     *
     * @param \Illuminate\Database\Eloquent\Builder $query
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function scopeActive($query)
    {
        return $query->where('status', 'active');
    }
}

Para utilizar este scope, você pode fazer o seguinte em qualquer parte do seu código:

$activeUsers = User::active()->get();

Exemplo de Global Scope

Para um Global Scope, vamos considerar que você quer que todas as consultas ao modelo User excluam automaticamente usuários marcados como excluídos (soft delete). Você pode definir um Global Scope assim:

class ActiveScope implements \Illuminate\Database\Eloquent\Scope
{
    public function apply(Builder $builder, Model $model)
    {
        $builder->where('deleted_at', '=', null);
    }
}

class User extends Model
{
    protected static function booted()
    {
        static::addGlobalScope(new ActiveScope);
    }
}

Com isso, todas as consultas ao modelo User agora excluem automaticamente usuários com deleted_at não nulo, sem necessidade de adicionar manualmente essa condição em cada consulta.

Conclusão

Os Laravel Query Scopes são ferramentas incrivelmente poderosas que ajudam a manter seu código de banco de dados DRY (Don't Repeat Yourself), limpo e fácil de ler. Ao utilizar Local e Global Scopes, você pode simplificar significativamente a lógica de consulta em seus modelos Eloquent, tornando seu código mais manutenível e agradável de trabalhar.

Incorpore Query Scopes em seus projetos Laravel e veja como eles podem melhorar a clareza e eficiência de suas consultas de banco de dados.

Fonte: - https://www.linkedin.com/pulse/simplificando-consultas-com-laravel-query-scopes-cristian-bernardes-kv6kf/?trackingId=3cRY95nCRwqY5tjpocRH%2Bg%3D%3D - https://laravel-news.com/query-scopes

1

Share

Donate to Site


About Author

Renato

Developer

Add a Comment
Comments 0 Comments

No comments yet! Be the first to comment

Blog Search


Categories

OUTROS (16) Variados (109) PHP (133) Laravel (171) Black Hat (3) front-end (29) linux (114) postgresql (39) Docker (28) rest (5) soap (1) webservice (6) October (1) CMS (2) node (7) backend (13) ubuntu (56) devops (25) nodejs (5) npm (3) nvm (1) git (8) firefox (1) react (7) reactnative (5) collections (1) javascript (7) reactjs (8) yarn (0) adb (1) Solid (2) blade (3) models (1) controllers (0) log (1) html (2) hardware (3) aws (14) Transcribe (2) transcription (1) google (4) ibm (1) nuance (1) PHP Swoole (5) mysql (31) macox (4) flutter (1) symfony (1) cor (1) colors (2) homeOffice (2) jobs (3) imagick (2) ec2 (1) sw (1) websocket (2) markdown (1) ckeditor (1) tecnologia (14) faceapp (1) eloquent (14) query (4) sql (40) ddd (3) nginx (9) apache (4) certbot (1) lets-encrypt (3) debian (12) liquid (1) magento (2) ruby (1) LETSENCRYPT (1) Fibonacci (1) wine (1) transaction (1) pendrive (1) boot (1) usb (1) prf (1) policia (2) federal (1) lucena (1) mongodb (4) paypal (1) payment (1) zend (1) vim (4) ciencia (6) js (1) nosql (1) java (1) JasperReports (1) phpjasper (1) covid19 (1) saude (1) athena (1) cinnamon (1) phpunit (2) binaural (1) mysqli (3) database (42) windows (6) vala (1) json (2) oracle (1) mariadb (4) dev (12) webdev (24) s3 (4) storage (1) kitematic (1) gnome (2) web (2) intel (3) piada (1) cron (2) dba (18) lumen (1) ffmpeg (2) android (2) aplicativo (1) fedora (2) shell (4) bash (3) script (3) lider (1) htm (1) csv (1) dropbox (1) db (3) combustivel (2) haru (1) presenter (1) gasolina (1) MeioAmbiente (1) Grunt (1) biologia (1) programming (22) performance (3) brain (1) smartphones (1) telefonia (1) privacidade (1) opensource (3) microg (1) iode (1) ssh (3) zsh (2) terminal (3) dracula (1) spaceship (1) mac (2) idiomas (1) laptop (2) developer (37) api (5) data (1) matematica (1) seguranca (2) 100DaysOfCode (9) hotfix (1) documentation (1) laravelphp (10) RabbitMQ (3) Elasticsearch (1) redis (2) Raspberry (4) Padrao de design (4) JQuery (1) angularjs (4) Dicas (43) Kubernetes (3) vscode (2) backup (1) angular (3) servers (2) pipelines (1) AppSec (1) DevSecOps (4) rust (1) RustLang (1) Mozilla (1) algoritimo (1) sqlite (1) Passport (2) jwt (5) security (2) translate (1) kube (2) iot (1) politica (2) bolsonaro (1) flow (1) podcast (1) Brasil (1) containers (3) traefik (1) networking (1) host (1) POO (2) microservices (2) bug (1) cqrs (1) arquitetura (3) Architecture (4) sail (3) militar (1) artigo (1) economia (1) forcas armadas (1) ffaa (1) autenticacao (2) autorizacao (2) authentication (4) authorization (3) NoCookies (1) wsl (4) memcached (1) macos (2) unix (2) kali-linux (1) linux-tools (5) apple (1) noticias (2) composer (1) rancher (1) k8s (1) escopos (1) orm (1) jenkins (4) github (5) gitlab (3) queue (1) Passwordless (1) sonarqube (1) phpswoole (1) laraveloctane (1) Swoole (1) Swoole (1) octane (1) Structurizr (1) Diagramas (1) c4 (1) c4-models (1) compactar (1) compression (1) messaging (1) restfull (1) eventdrive (1) services (1) http (1) Monolith (1) microservice (1) historia (1) educacao (1) cavalotroia (1) OOD (0) odd (1) chatgpt (1) openai (3) vicuna (1) llama (1) gpt (1) transformers (1) pytorch (1) tensorflow (1) akitando (1) ia (1) nvidia (1) agi (1) guard (1) multiple_authen (2) rpi (1) auth (1) auth (1) livros (2) ElonMusk (2) Oh My Zsh (1) Manjaro (1) BigLinux (2) ArchLinux (1) Migration (1) Error (1) Monitor (1) Filament (1) LaravelFilament (1) replication (1) phpfpm (1) cache (1) vpn (1) l2tp (1) zorin-os (1) optimization (1) scheduling (1) monitoring (2) linkedin (1) community (1) inteligencia-artificial (2) wsl2 (1) maps (1) API_KEY_GOOGLE_MAPS (1) repmgr (1) altadisponibilidade (1) banco (1) modelagemdedados (1) inteligenciadedados (4) governancadedados (1) bancodedados (2) Observability (1) picpay (1) ecommerce (1) Curisidades (1) Samurai (1) KubeCon (1) GitOps (1) Axios (1) Fetch (1) Deepin (1) vue (4) nuxt (1) PKCE (1) Oauth2 (2) webhook (1) TypeScript (1) tailwind (1) gource (2)

New Articles



Get Latest Updates by Email