Laravel设置了自动WHERE子句

时间:2013-01-11 04:43:28

标签: php where laravel eloquent

我使用扩展generic_model的模型,而后者又扩展了Eloquent(因此我使用了几个已经设置为继承的crud方法)。

我使用的很多表都调用了soft delete,它需要一个WHERE子句......

WHERE deleted = 0

有没有办法让Laravel的行为方式使得这个WHERE子句自动包含在所有查询和对彼此相关的对象的所有查询中?

e.g。

pages where id = 5 and deleted = 0

然后......

images where page_id = 5 and deleted = 0

2 个答案:

答案 0 :(得分:7)

如果你正在使用laravel 3,这就是你需要的

在你的模特上

public function query()
{

    $query = parent::query();

    $query->where('deleted','=','0');

    return $query;
}

如果您使用的是laravel 4,只需更改 newQuery 的方法查询

public function newQuery()
{

    $query = parent::newQuery();

    $query->where('deleted','=','0');

    return $query;
}

reference

答案 1 :(得分:1)

在关系中,您可以在回报中添加where_clause:

 public function pages()
{
    return $this->has_many('Page')->where_deleted(0);
}

在您的模型中,您可以添加以下内容:

public static function active()
{
    return self::where_delete(0)->get();
}

使用Page::active()代替Page::all() (或者您可以从模型中的功能中删除->get(),这样您仍然可以进一步修改查询(Page::active()->order_by('name')