DEV Community

Cover image for Global Scope in Laravel (StepWise).
AJ
AJ

Posted on β€’ Originally published at Medium

Global Scope in Laravel (StepWise).

Global Scopes are a vital concept in Laravel, enabling the reuse of Eloquent conditions throughout your application. By implementing Global Scopes, you can apply specific conditions to queries across all models, promoting code reuse and consistency. In contrast, Local Scopes are limited to a single model. In this tutorial, we will focus on creating and utilizing Global Scopes in Laravel.

  1. In This Step, we will create a Global Class inside a app/Scopes/ActiveScope
<?php

namespace app\Scopes;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Scope;

class ActiveScope implements Scope
{
    public function apply(Builder $builder, Model $model)
    {
        // Define your global condition here
        $builder->where('is_active', '=', '1');

        //or we can write
        $builder->whereIsActive('1');

    }
}
Enter fullscreen mode Exit fullscreen mode
  1. Now Define ActiveScope in the User Model. We Should override a given model’s boot method and use the addGlobalScope method:
<?php

namespace App;

use App\Scopes\AgeScope;
use Illuminate\Database\Eloquent\Model;
use App\Scopes\ActiveScope;

class User extends Model
{
    /**
     * The "booting" method of the model.
     *
     * @return void
     */
    protected static function boot()
    {
        parent::boot();

        static::addGlobalScope(new ActiveScope);
    }
}
Enter fullscreen mode Exit fullscreen mode

After adding the ActiveScope in model, User::all() will generate the following SQL.

select * from `users` where `is_active` = '1'
Enter fullscreen mode Exit fullscreen mode

There may be scenarios where you want to fetch all data without applying the global scope. In Laravel, you can bypass a global scope and fetch all data by using the withoutGlobalScope method.

User::withoutGlobalScope(ActiveScope::class)->get();
Enter fullscreen mode Exit fullscreen mode

If you want to remove multiple or all of the global scopes applied to a model, you can use the withoutGlobalScopes method in Laravel. This method allows you to bypass all global scopes or specify the ones you want to remove. Here's an example:

// Remove all of the global scopes...
User::withoutGlobalScopes()->get();
Enter fullscreen mode Exit fullscreen mode
// Remove some of the global scopes...
User::withoutGlobalScopes([
    ActiveScope::class, AgeScope::class
])->get();
Enter fullscreen mode Exit fullscreen mode

And if you love the content and want to support more awesome articles, consider buying me a coffee! β˜•οΈπŸ₯³ Your support means the world to me and helps keep the knowledge flowing. You can do that right here: πŸ‘‰ Buy Me a Coffee

AWS GenAI LIVE image

Real challenges. Real solutions. Real talk.

From technical discussions to philosophical debates, AWS and AWS Partners examine the impact and evolution of gen AI.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

πŸ‘‹ Kindness is contagious

Please leave a ❀️ or a friendly comment on this post if you found it helpful!

Okay