0

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

我使用的许多表都调用软删除,这需要一个 WHERE 子句...

WHERE deleted = 0

有没有办法让 Laravel 以这样的方式运行,即这个 WHERE 子句自动包含在所有查询中以及对彼此相关的对象的所有查询中?

例如

pages where id = 5 and deleted = 0

进而...

images where page_id = 5 and deleted = 0
4

2 回答 2

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;
}

参考

于 2013-06-16T18:58:41.037 回答
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')

于 2013-01-11T09:52:25.693 回答