2016-11-08 8 views
1

商品表にステータス列を追加しました。今私はそれを使用するときにProduct::all()私はステータスがアクティブである製品を得ることが欲しい。ソフト削除のようなものです。私はモデルが再びアクティブになるまでパッシブな製品を無視したいと思っています。これを行う方法はありますか?ステータス(条件)チェックをlaravelのモデルに直接適用するにはどうすればよいですか?

PS:すでにモデル(Product :: class)を数多くの場所で使用しています。だから私はすでに作ったすべてのメソッドに影響を与える直接的な方法を探しています。さもなければ私はすべてのメソッドに一つずつソリューションを適用しなければなりません。

答えて

2

ソフト削除と同じ機能を探している場合は、global scopesを使用できます。 SoftDeletes trait uses global scope。したがって、ProductモデルProduct::all()にグローバルスコープを適用する場合は、status = 1のすべての結果が返されます。

+1

はい、私が探していたようです。私はグローバルスコープのものを試してみます。 – Skeletor

1

あなたはそれを試すことができます。

Product::where('status', 1)->get() 
+0

私は既に作成したすべてのメソッドに影響を与えるソリューションを探しています。この方法で私はすべてのメソッドを通過し、1つずつ追加する必要があります。 – Skeletor

2

これは、IMOの最良の方法ですが、モデル

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

このようにスコープを作成するには、この

Product::active(); 
ような何かを行うことができます
+0

私は既に作成したすべてのメソッドに影響を与えるソリューションを探しています。この方法で私はすべてのメソッドを通過し、1つずつ追加する必要があります。 – Skeletor

+0

この場合、モデルにすべてを静的メソッドとして追加することができます。私はそれが最善の方法に行くかどうかはわかりません。配列の引数を渡さないとエラーになることに注意してください。 public static function all($ ar = []) { return self :: where(['status_id' => 1]) - > get(); } – Indy

関連する問題