La respuesta se dio cuando no había ámbito de consulta función disponible.
Puede anular la consulta principal, solo para 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;
}
}
Ahora, simplemente use cualquier cosa, pero los usuarios no aprobados no aparecerán en el resultado.
$approvedPosts = Post::where('title', 'like', '%Hello%');
Ahora, si necesita recuperar todas las publicaciones, incluso las no aprobadas, puede usar
$approvedPosts = Post::allowUnapprovedPosts()->where('title', 'like', '%Hello%');
Actualizar (Usando el alcance de la consulta):
Desde entonces, Laravel ahora proporciona Ámbitos de consulta globales , aproveche eso en lugar de esta solución pirateada, observe la fecha de esta respuesta, es demasiado antigua y ya han cambiado muchas cosas.
// Using a local query scope
class Post extends Eloquent
{
public function scopeApproved($query)
{
return $query->where('approved', 1);
}
}
Puedes usarlo como:
$approvedPosts = Post::approved()->get();