lacodix / laravel-global-or-scope
一个Laravel包,用于在Eloquent模型中使用或操作来添加全局作用域。
v1.1.1
2024-09-15 14:41 UTC
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-09-15 14:57:41 UTC
README
此包允许您向模型添加全局作用域,并结合或条件。它包含一些或全部动态禁用或作用域的功能。
文档
您可以在我们的文档站点找到此包的完整文档。
安装
composer require lacodix/laravel-global-or-scope
基本用法
只需将特质添加到您的Eloquent模型中,然后在启动时使用addGlobalOrScopes方法。
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();
这将导致执行以下SQL查询
select * from "posts" where "user_id" = 1000 and (("col1" is null and "col2" = 1) or ("col3" = 2))
要临时禁用,您可以使用
Post::query()->withoutGlobalOrScopes()->where('user_id', 1000)->get();
这将产生一个简单的
select * from "posts" where "user_id" = 1000
测试
composer test
贡献
请在提交前运行以下命令并解决潜在问题,并考虑为新的功能添加测试。
composer rector:test composer insights composer csfixer:test composer phpstan:test
变更日志
请参阅CHANGELOG以获取有关最近更改的更多信息。
鸣谢
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。