Câu trả lời được đưa ra khi không có phạm vi truy vấn tính năng có sẵn.
Bạn có thể ghi đè truy vấn chính, chỉ dành cho Post
mô hình, như
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;
}
}
Bây giờ, chỉ cần sử dụng bất kỳ thứ gì, nhưng những người dùng chưa được phê duyệt sẽ không xuất hiện trong kết quả.
$approvedPosts = Post::where('title', 'like', '%Hello%');
Bây giờ, nếu bạn cần truy xuất tất cả các bài đăng ngay cả những bài chưa được duyệt thì bạn có thể sử dụng
$approvedPosts = Post::allowUnapprovedPosts()->where('title', 'like', '%Hello%');
Cập nhật (Sử dụng phạm vi truy vấn):
Kể từ đó, Laravel hiện cung cấp Phạm vi truy vấn toàn cầu , tận dụng rằng thay vì giải pháp hacky này, hãy lưu ý ngày của câu trả lời này, nó quá cũ và hiện tại có quá nhiều thứ đã thay đổi.
// Using a local query scope
class Post extends Eloquent
{
public function scopeApproved($query)
{
return $query->where('approved', 1);
}
}
Bạn có thể sử dụng nó như:
$approvedPosts = Post::approved()->get();