Svaret blev givet, da der ikke var noget forespørgselsomfang funktion tilgængelig.
Du kan tilsidesætte hovedforespørgslen, kun for Post
model, som
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;
}
}
Nu skal du blot bruge hvad som helst, men ikke-godkendte brugere vises ikke i resultatet.
$approvedPosts = Post::where('title', 'like', '%Hello%');
Nu, hvis du har brug for at hente alle indlæg, selv ikke-godkendte, kan du bruge
$approvedPosts = Post::allowUnapprovedPosts()->where('title', 'like', '%Hello%');
Opdatering (ved hjælp af forespørgselsomfanget):
Siden giver Laravel nu globale forespørgselsomfang , udnytte, at i stedet for denne hacky løsning, læg mærke til datoen for dette svar, det er for gammelt, og så mange ting har ændret sig nu.
// Using a local query scope
class Post extends Eloquent
{
public function scopeApproved($query)
{
return $query->where('approved', 1);
}
}
Du kan bruge det som:
$approvedPosts = Post::approved()->get();