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.
- 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');
}
}
- 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);
}
}
After adding the ActiveScope in model, User::all() will generate the following SQL.
select * from `users` where `is_active` = '1'
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();
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();
// Remove some of the global scopes...
User::withoutGlobalScopes([
ActiveScope::class, AgeScope::class
])->get();
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
Top comments (0)