我使用扩展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
答案 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;
}
答案 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')
)