जवाब तब दिया गया जब कोई क्वेरी स्कोप नहीं था सुविधा उपलब्ध है।
आप मुख्य क्वेरी को केवल Post
. के लिए ओवरराइड कर सकते हैं मॉडल, जैसे
class Post extends Eloquent
{
protected static $_allowUnapprovedPosts = false;
public function newQuery()
{
$query = parent::newQuery();
if (!static::$_allowUnapprovedPosts) {
$query->where('approved', '=', 1);
} else {
static::$_allowUnapprovedPosts = false;
}
return $query;
}
// call this if you need unapproved posts as well
public static function allowUnapprovedPosts()
{
static::$_allowUnapprovedPosts = true;
return new static;
}
}
अब, बस कुछ भी उपयोग करें, लेकिन अस्वीकृत उपयोगकर्ता परिणाम में दिखाई नहीं देंगे।
$approvedPosts = Post::where('title', 'like', '%Hello%');
अब, यदि आपको सभी पोस्ट को पुनः प्राप्त करने की आवश्यकता है, यहां तक कि अस्वीकृत पोस्ट भी तो आप उपयोग कर सकते हैं
$approvedPosts = Post::allowUnapprovedPosts()->where('title', 'like', '%Hello%');
अपडेट करें (क्वेरी स्कोप का उपयोग करके):
चूंकि, लैरावेल अब ग्लोबल क्वेरी स्कोप्स प्रदान करता है , लाभ उठाएं कि इस हैकी समाधान के बजाय, इस उत्तर की तारीख पर ध्यान दें, यह बहुत पुराना है और अब तक बहुत कुछ बदल गया है।
// Using a local query scope
class Post extends Eloquent
{
public function scopeApproved($query)
{
return $query->where('approved', 1);
}
}
आप इसे इस तरह इस्तेमाल कर सकते हैं:
$approvedPosts = Post::approved()->get();