sql >> Database teknologi >  >> RDS >> Mysql

Laravel 4:Hvordan anvender man en WHERE-betingelse på alle forespørgsler i en veltalende klasse?

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();


  1. MYSQL - Umuligt at oprette en ekstern nøgle

  2. Filtrering af advarselslogge i EM13c

  3. Opslagstavle - Databaseoptimering

  4. MySQLi udarbejdede erklæringer fejlrapportering