Global Scope in Laravel (StepWise).

Barbara Streisand
Release: 2024-09-24 06:20:32
Original
637 people have browsed it

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');

    }
}
Copy after login
  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);
    }
}
Copy after login

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

select * from `users` where `is_active` = '1'
Copy after login

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();
Copy after login

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();
Copy after login
// Remove some of the global scopes...
User::withoutGlobalScopes([
    ActiveScope::class, AgeScope::class
])->get();
Copy after login

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

The above is the detailed content of Global Scope in Laravel (StepWise).. For more information, please follow other related articles on the PHP Chinese website!

source:dev.to
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template