sql >> データベース >  >> RDS >> Mysql

Laravel 4:EloquentクラスのすべてのクエリにWHERE条件を適用するにはどうすればよいですか?

    答えは、クエリスコープ がなかったときに与えられました。 利用可能な機能。

    Postに対してのみ、メインクエリを上書きできます のようなモデル

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

    これで、何でも使用できますが、未承認のユーザーは結果に表示されません。

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

    これで、未承認の投稿も含めてすべての投稿を取得する必要がある場合は、

    を使用できます。
    $approvedPosts = Post::allowUnapprovedPosts()->where('title',  'like', '%Hello%');
    

    更新(クエリスコープを使用):

    それ以来、Laravelはグローバルクエリスコープ を提供するようになりました 、このハッキーなソリューションの代わりに、この回答の日付に注意してください。古すぎて、今では多くのことが変更されています。

    // Using a local query scope
    class Post extends Eloquent
    {
    
        public function scopeApproved($query)
        {
            return $query->where('approved', 1);
        }
    }
    

    次のように使用できます:

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


    1. GoogleDatastudioを使用したHerokuPostgresql

    2. mysqlソート文字列番号

    3. スプレッドシートとデータベース:切り替える時が来ましたか?パート2

    4. PostgreSQLの監査ログ