Laravel:行为类似于软删除的活动列
Laravel: active column that behave like softdelete
我在 Laravel 中有一个使用软删除的模型帐户。
除此之外,我想要另一个名为 active 的列,它的行为有点相同。如果它设置为 XXX,则所有 Account::
调用不应将它们包含在 return 中。在我将活动值设置为 YYY 之前,在此之后,它们应该被包括在内。
有什么办法吗?
我想自己设置 XXX 和 YYY 值。所以我可以说 return 仅当 active = 1 或 active = whatEverIWant
编辑:我知道我可以通过在每次调用时检查值来做到这一点,但我已经在很多地方使用了这些帐户,不想在任何地方都添加它
可以通过两种方式接近
选项 1:全局范围
您可以在模型上定义一个全局范围,returns 仅记录活动设置为 1
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,您都可以使用 withoutGlobalScopes()
或 withoutGlobalScope('active')
调用它 - 将删除全局范围内定义的约束。
$accounts = Account::withoutGlobalScopes()->get();
//OR
$accounts = Account::withoutGlobalScope('active');
选项 2:本地作用域
您可以在模型上为每个活动和非活动状态class定义一个本地范围
class Account extends Model
{
public function scopeActive($query)
{
$query->where('active', 1);
}
public function scopeInactive($query)
{
$query->where('active', '<>', 1);
}
}
然后当你想过滤活跃或不活跃的记录时
$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
我在 Laravel 中有一个使用软删除的模型帐户。
除此之外,我想要另一个名为 active 的列,它的行为有点相同。如果它设置为 XXX,则所有 Account::
调用不应将它们包含在 return 中。在我将活动值设置为 YYY 之前,在此之后,它们应该被包括在内。
有什么办法吗?
我想自己设置 XXX 和 YYY 值。所以我可以说 return 仅当 active = 1 或 active = whatEverIWant
编辑:我知道我可以通过在每次调用时检查值来做到这一点,但我已经在很多地方使用了这些帐户,不想在任何地方都添加它
可以通过两种方式接近
选项 1:全局范围
您可以在模型上定义一个全局范围,returns 仅记录活动设置为 1
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,您都可以使用 withoutGlobalScopes()
或 withoutGlobalScope('active')
调用它 - 将删除全局范围内定义的约束。
$accounts = Account::withoutGlobalScopes()->get();
//OR
$accounts = Account::withoutGlobalScope('active');
选项 2:本地作用域
您可以在模型上为每个活动和非活动状态class定义一个本地范围
class Account extends Model
{
public function scopeActive($query)
{
$query->where('active', 1);
}
public function scopeInactive($query)
{
$query->where('active', '<>', 1);
}
}
然后当你想过滤活跃或不活跃的记录时
$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