A resposta foi dada quando não havia escopo de consulta recurso disponível.
Você pode substituir a consulta principal, apenas para o
Post
modelo, como 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;
}
}
Agora, basta usar qualquer coisa, mas usuários não aprovados não aparecerão no resultado.
$approvedPosts = Post::where('title', 'like', '%Hello%');
Agora, se você precisar recuperar todas as postagens, mesmo as não aprovadas, poderá usar
$approvedPosts = Post::allowUnapprovedPosts()->where('title', 'like', '%Hello%');
Atualização (usando o escopo da consulta):
Desde então, o Laravel agora fornece Escopos de consulta globais , aproveite que, em vez dessa solução hacky, observe a data desta resposta, é muito antiga e muitas coisas mudaram agora.
// Using a local query scope
class Post extends Eloquent
{
public function scopeApproved($query)
{
return $query->where('approved', 1);
}
}
Você pode usá-lo como:
$approvedPosts = Post::approved()->get();