lacodix/laravel-global-or-scope
Add multiple Eloquent global scopes that are grouped and applied with OR logic instead of the default AND. Use a simple trait to register OR-scopes and optionally disable some or all of them per query with withoutGlobalOrScopes().
This package allows you to add global scopes to models combined with an or condition. It contains additional functionality to disable some or all or-scopes on the fly.
You can find the entire documentation for this package on our documentation site
composer require lacodix/laravel-global-or-scope
Just add the trait to your eloquent model and then you can use the addGlobalOrScopes method when booting.
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Scope;
use Lacodix\LaravelGlobalOrScope\Traits\GlobalOrScope;
class Post extends Model
{
use GlobalOrScope;
public static function booting(): void
{
static::addGlobalOrScopes([Scope1::class, Scope2::class]);
}
}
class Scope1 implements Scope
{
public function apply(Builder $builder, Model $model)
{
return $builder->whereNull('col1')->where('col2', 1);
}
}
class Scope2 implements Scope
{
public function apply(Builder $builder, Model $model)
{
return $builder->where('col3', 2);
}
}
...
Post::query()->where('user_id', 1000)->get();
This results in running the following SQL Query
select * from "posts" where "user_id" = 1000 and (("col1" is null and "col2" = 1) or ("col3" = 2))
For temporary disabling you can use
Post::query()->withoutGlobalOrScopes()->where('user_id', 1000)->get();
what results in a simple
select * from "posts" where "user_id" = 1000
composer test
Please run the following commands and solve potential problems before committing and think about adding tests for new functionality.
composer rector:test
composer insights
composer csfixer:test
composer phpstan:test
Please see CHANGELOG for more information on what has changed recently.
The MIT License (MIT). Please see License File for more information.
How can I help you explore Laravel packages today?