【问题标题】:Manual Soft Delete手动软删除
【发布时间】:2015-01-12 10:02:21
【问题描述】:

我继承了一个旧的 MySQL 数据库,并为它编写了一个雄辩的模型。

用户表中有一个名为“active”的列,它接受 1 或 0。

我想知道。有没有办法在模型中编写查询,以便在查询模型时不包括非活动用户?很像软删除?

function __construct()
{
    return parent::where( 'active', '1' );
}

..似乎可以工作,但仍然包含 NULL 值

【问题讨论】:

标签: laravel eloquent


【解决方案1】:

您可以像这样在模型中使用方法;

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

然后您可以使用Users::active()->get(); 获取活跃用户,这样您在需要时仍然可以访问非活跃用户。

或者像这样添加一个静态方法;

public static function active()
{
    return self->where('active', 1)->get();
}

您可以将其与以下内容一起使用; Users::active()。由于这是一个 Eloquent Collect,您还可以查询结果集合。

要自动优化模型的结果,请使用全局范围; here in docs。可以从以下站点找到一个示例,here

【讨论】:

  • 谢谢马特。这行得通,但是有没有一种softdelete风格的解决方案,它会假设你只想要不活动的?即用户::all();将只返回活跃用户,User::inactive()->get();会全部退回吗?
  • 要自动优化结果,请使用全局范围,Jarek 对您的帖子发表了评论。我没有亲自使用过这些。
猜你喜欢
  • 2011-12-26
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多