sql >> Databáze >  >> RDS >> Mysql

Laravel 4:Jak aplikovat podmínku WHERE na všechny dotazy třídy Eloquent?

Odpověď byla dána, když neexistoval žádný rozsah dotazu funkce k dispozici.

Hlavní dotaz můžete přepsat pouze pro Post model, jako

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;
    }
}

Nyní jednoduše použijte cokoli, ale neschválení uživatelé se ve výsledku neobjeví.

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

Nyní, pokud potřebujete načíst všechny příspěvky, včetně neschválených, můžete použít

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

Aktualizovat (pomocí rozsahu dotazu):

Protože Laravel nyní poskytuje Globální rozsahy dotazů , využijte toho, že místo tohoto otřepaného řešení si všimněte data této odpovědi, je příliš stará a tolik věcí se již změnilo.

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

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

Můžete to použít jako:

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


  1. Použití aliasového sloupce v klauzuli where v Postgresql

  2. SQL Server – Odeberte všechny netisknutelné znaky ASCII

  3. Jak zrušit tabulky a sloupce pomocí SQL

  4. Instalace Oracle 9i Developer Suite 2.0 na Windows