Het antwoord werd gegeven toen er geen querybereik was functie beschikbaar.
U kunt de hoofdquery overschrijven, alleen voor de Post
model, zoals
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;
}
}
Gebruik nu gewoon alles, maar niet-goedgekeurde gebruikers verschijnen niet in het resultaat.
$approvedPosts = Post::where('title', 'like', '%Hello%');
Als u nu alle berichten wilt ophalen, zelfs niet-goedgekeurde, kunt u
$approvedPosts = Post::allowUnapprovedPosts()->where('title', 'like', '%Hello%');
Update (met behulp van het querybereik):
Sindsdien biedt Laravel nu Global Query Scopes , gebruik dat in plaats van deze hacky-oplossing, let op de datum van dit antwoord, het is te oud en er zijn inmiddels zoveel dingen veranderd.
// Using a local query scope
class Post extends Eloquent
{
public function scopeApproved($query)
{
return $query->where('approved', 1);
}
}
Je kunt het als volgt gebruiken:
$approvedPosts = Post::approved()->get();