sql >> Databasteknik >  >> RDS >> Mysql

Laravel 4:Hur tillämpar man ett WHERE-villkor på alla frågor i en vältalig klass?

Svaret gavs när det inte fanns något frågeomfattning funktion tillgänglig.

Du kan åsidosätta huvudfrågan, endast för Post modell, 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, använd bara vad som helst, men icke-godkända användare kommer inte att visas i resultatet.

$approvedPosts = Post::where('title',  'like', '%Hello%');

Nu, om du behöver hämta alla inlägg även ej godkända kan du använda

$approvedPosts = Post::allowUnapprovedPosts()->where('title',  'like', '%Hello%');

Uppdatera (med frågeomfånget):

Sedan tillhandahåller Laravel nu Global Query Scopes , utnyttja att istället för denna hackiga lösning, lägg märke till datumet för det här svaret, det är för gammalt och så mycket saker har förändrats vid det här laget.

// Using a local query scope
class Post extends Eloquent
{

    public function scopeApproved($query)
    {
        return $query->where('approved', 1);
    }
}

Du kan använda det som:

$approvedPosts = Post::approved()->get();


  1. Få värde baserat på max för en annan kolumn grupperad efter en annan kolumn

  2. Så här åtgärdar du MySQL JDBC 08001-databasanslutningsfel

  3. Hur man AUTO uppdaterar MySQL efter att tidsstämpelfältet har gått ut

  4. PostgreSQL:Visa tabeller i PostgreSQL