Отговорът беше даден, когато нямаше обхват на заявката налична функция.
Можете да замените основната заявка, само за 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%');
Актуализация (използвайки обхвата на заявката):
Тъй като Laravel вече предоставя Глобални обхвати на заявки , използвайте, че вместо това хакерско решение, забележете датата на този отговор, той е твърде стар и толкова много неща са се променили досега.
// Using a local query scope
class Post extends Eloquent
{
public function scopeApproved($query)
{
return $query->where('approved', 1);
}
}
Можете да го използвате като:
$approvedPosts = Post::approved()->get();