首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Laravel:行为类似于软删除的活动列

Laravel:行为类似于软删除的活动列
EN

Stack Overflow用户
提问于 2020-12-17 12:51:26
回答 1查看 124关注 0票数 0

我在Laravel有一个使用软删除的模型帐户。除此之外,我还想要另一个名为active的专栏,它的行为也是一样的。如果它的设置为XXX,那么所有的Account::调用都不应该包含在返回中。在我将活动值设置为YYY之前,在此之后,应该包括它们。有办法这样做吗?我想设置自己的XXX和YYY值。因此,我可以说,只有当活动=1或active = whatEverIWant时才返回

编辑:我知道我可以在每个电话中检查这个值,但是我已经在很多地方使用了这个帐户,所以我不想在任何地方添加它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-17 13:20:21

可以用两种方式来处理

选项1:全局范围

您可以在模型上定义一个全局范围,它只返回活动设置为1的记录。

代码语言:javascript
代码运行次数:0
运行
复制
class Account extends Model
{

    protected static function booted()
    {
        static::addGlobalScope('active', function (Builder $builder) {
            $builder->where('active', 1);
        });
    }

    // rest of the class code
}

现在,模型上的所有查询都将在全局范围内定义约束。

当您确实希望检索记录时,无论active是否设置为1 not,您都可以使用withoutGlobalScopes()withoutGlobalScope('active')调用它--将删除全局范围中定义的约束。

代码语言:javascript
代码运行次数:0
运行
复制
$accounts = Account::withoutGlobalScopes()->get();

//OR

$accounts = Account::withoutGlobalScope('active');

选项2:本地作用域

可以在模型类上为每个活动状态和非活动状态定义一个本地范围。

代码语言:javascript
代码运行次数:0
运行
复制
class Account extends Model
{
    public function scopeActive($query)
    {
        $query->where('active', 1);
    }

    public function scopeInactive($query)
    {
        $query->where('active', '<>', 1);
    }
}

然后,当您想要筛选活动或非活动的记录时。

代码语言:javascript
代码运行次数:0
运行
复制
$activeAccounts = Account::active()->get();

$inactiveAccounts = Account::inactive()->get();

$accounts = Account::get(); //to get all records irrespective of whether active or inactive

Laravel软删除也在幕后使用范围。

Laravel博士:https://laravel.com/docs/master/eloquent#query-scopes

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65341102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档