lacodix/laravel-global-or-scope

一个Laravel包,用于在Eloquent模型中使用或操作来添加全局作用域。

资助包维护!
lacodix

安装: 135

依赖者: 0

建议者: 0

安全: 0

星星: 5

关注者: 2

分支: 1

开放问题: 0

类型:laravel-package

v1.1.1 2024-09-15 14:41 UTC

This package is auto-updated.

Last update: 2024-09-15 14:57:41 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

此包允许您向模型添加全局作用域,并结合或条件。它包含一些或全部动态禁用或作用域的功能。

文档

您可以在我们的文档站点找到此包的完整文档。

安装

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)。请参阅许可证文件以获取更多信息。