lacodix / laravel-global-or-scope
A Laravel package to add possibility to use global scopes with an or operation in Eloquent Models.
Fund package maintenance!
lacodix
Installs: 164
Dependents: 0
Suggesters: 0
Security: 0
Stars: 5
Watchers: 2
Forks: 1
Open Issues: 0
Type:laravel-package
Requires
- php: ^8.1
- illuminate/contracts: ^9.0|^10.0|^11.0
- spatie/laravel-package-tools: ^1.14.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.13
- illuminate/database: ^9.47|^10.0|^11.0
- larastan/larastan: ^2.0.1
- laravel/pint: ^1.0
- nunomaduro/collision: ^6.0|^7.8|^8.0
- nunomaduro/phpinsights: ^2.6
- orchestra/testbench: ^7.19|^8.8|^9.0
- pestphp/pest: ^1.21|^2.20
- pestphp/pest-plugin-laravel: ^1.1|^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- spatie/laravel-ray: ^1.26
This package is auto-updated.
Last update: 2024-12-15 15:34:30 UTC
README
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.
Documentation
You can find the entire documentation for this package on our documentation site
Installation
composer require lacodix/laravel-global-or-scope
Basic Usage
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
Testing
composer test
Contributing
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
Changelog
Please see CHANGELOG for more information on what has changed recently.
Credits
License
The MIT License (MIT). Please see License File for more information.