雄辩的ORM,如何避免冗余查询?

时间:2013-04-07 20:30:21

标签: laravel laravel-4 eloquent

假设我在所有数据库表中都有字段状态。当我想删除一条记录而不是清除它时,我将字段状态的值设置为0.这意味着我的所有查询当然都会使用where子句,例如:

WHERE status = 1

但是,这意味着我必须编写并将where('status','=',1)附加到我雄辩的模型的所有方法中。它总是如下:

Post::find(1).where('status', '=', 1)
Post::where('status', '=', 1)->get()
Post::find(1).where('status', '=', 1).comments().where('status', '=', 1)->get()

有没有办法将某些内容定义为默认范围,以便status = 1始终存在于我的模型的所有方法中并始终存在?

我感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

这应该可以解决问题,至少关于软删除:

http://four.laravel.com/docs/eloquent#soft-deleting

答案 1 :(得分:1)

您可以使用范围方法。

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

然后,你这样使用:

Post::active()->get();