Jawaban diberikan ketika tidak ada lingkup kueri fitur yang tersedia.
Anda dapat mengganti kueri utama, hanya untuk Post
model, seperti
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;
}
}
Sekarang, cukup gunakan apa saja, tetapi pengguna yang tidak disetujui tidak akan muncul di hasil.
$approvedPosts = Post::where('title', 'like', '%Hello%');
Sekarang, jika Anda perlu mengambil semua posting bahkan yang tidak disetujui, Anda dapat menggunakan
$approvedPosts = Post::allowUnapprovedPosts()->where('title', 'like', '%Hello%');
Pembaruan (Menggunakan cakupan kueri):
Karena, Laravel sekarang menyediakan Cakupan Kueri Global , manfaatkan bahwa alih-alih solusi peretasan ini, perhatikan tanggal jawaban ini, terlalu tua dan banyak hal berubah sekarang.
// Using a local query scope
class Post extends Eloquent
{
public function scopeApproved($query)
{
return $query->where('approved', 1);
}
}
Anda dapat menggunakannya seperti:
$approvedPosts = Post::approved()->get();