Die Antwort wurde gegeben, als es keinen Abfrageumfang gab Funktion verfügbar.
Sie können die Hauptabfrage nur für den Post
überschreiben Modell, wie
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;
}
}
Verwenden Sie jetzt einfach alles, aber nicht genehmigte Benutzer werden nicht im Ergebnis angezeigt.
$approvedPosts = Post::where('title', 'like', '%Hello%');
Wenn Sie jetzt alle Posts abrufen müssen, auch nicht genehmigte, können Sie
verwenden$approvedPosts = Post::allowUnapprovedPosts()->where('title', 'like', '%Hello%');
Aktualisieren (unter Verwendung des Abfragebereichs):
Seitdem bietet Laravel jetzt Global Query Scopes , nutzen Sie das anstelle dieser hackigen Lösung, beachten Sie das Datum dieser Antwort, es ist zu alt und es hat sich inzwischen so viel geändert.
// Using a local query scope
class Post extends Eloquent
{
public function scopeApproved($query)
{
return $query->where('approved', 1);
}
}
Sie können es wie folgt verwenden:
$approvedPosts = Post::approved()->get();