La réponse a été donnée alors qu'il n'y avait pas de étendue de la requête fonctionnalité disponible.
Vous pouvez remplacer la requête principale, uniquement pour le Post
modèle, comme
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;
}
}
Maintenant, utilisez simplement n'importe quoi, mais les utilisateurs non approuvés n'apparaîtront pas dans le résultat.
$approvedPosts = Post::where('title', 'like', '%Hello%');
Maintenant, si vous avez besoin de récupérer tous les messages, même ceux non approuvés, vous pouvez utiliser
$approvedPosts = Post::allowUnapprovedPosts()->where('title', 'like', '%Hello%');
Mise à jour (à l'aide de la portée de la requête) :
Depuis, Laravel fournit désormais Portées de requête globales , tirez parti de cela au lieu de cette solution hacky, notez la date de cette réponse, elle est trop ancienne et tant de choses ont changé maintenant.
// Using a local query scope
class Post extends Eloquent
{
public function scopeApproved($query)
{
return $query->where('approved', 1);
}
}
Vous pouvez l'utiliser comme :
$approvedPosts = Post::approved()->get();