2013-04-07 46 views
0

假設我在所有數據庫表中都有字段狀態。當我想刪除,而不是清除它的記錄,我的領域地位的值設置爲0。這意味着,當然我所有的查詢將始終使用where子句,如:雄辯的ORM,如何避免多餘的查詢?

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() 

有沒有一種方法來定義的東西作爲默認範圍有哪裏狀態= 1總是出現在我的模型的所有方法和所有的時間?

我感謝任何幫助!

+1

到這裏看看:HTTP:/ /usman.it/filter-eloquent-results-overriding-laravel/](http://usman.it/filter-eloquent-results-overriding-laravel/)使用此示例,您必須將其應用於每個模型,但你可以創建一個新的基礎模型類這個代碼,然後讓所有的模型擴展這個代碼。 – Christian 2013-04-07 22:34:13

回答

1

您可以使用範圍方法。

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

然後,使用這樣的:

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

然後,您必須在所有方法中使用active(),並且在某些情況下,您將不得不多次使用它,例如Post :: find(1) - > active() - > comments-> active()。如你所見,這並沒有幫助。 – user2094178 2013-04-14 09:07:30