0

Eloquentモデルがあり、特定のモデル用にいくつかのショートカット関数を作成したいと思います。たとえばUser::tall()、を書く代わりにUser::where("height", ">", 185)。ただし、静的メソッドと非静的メソッドを組み合わせて、を呼び出すこともできるようにします$user->where('is_active', '=', '1')->tall()

それができる方法はありますか?Laravelはどういうわけかそれを行うことができ、両方のコンテキストからどこを呼び出すことができるかがわかります。コードを調べましたが、オブジェクトメソッドしか見つかりません。

4

3 に答える 3

4

クエリスコープはあなたが探しているものだと思います: http://laravel.com/docs/eloquent#query-scopes

public function scopeTall($query)
{
    return $query->where('height', '>', 185);
}

クエリ スコープにパラメーターを指定することもできます。次に例を示します。

public function scopeTall($query, $height = 185)
{
    return $query->where('height', '>', $height);
}

スコープ クエリは連鎖可能です。

于 2014-04-07T11:40:46.517 に答える
1

このようなもので試しましたか?

class YourClassModel extends Eloquent
{
     public static function tall() 
     {
         // Return the result of your query
         return ...;
     }
}
于 2013-01-07T21:45:56.670 に答える
1

ユーザークラスに新しい静的メソッドを書くだけです

class User extends Eloquent {
    public static function tall() {
        return User::where("height", ">", 185);
    }
}

その後、別の場所にアクセスします

$users = User::tall()->get();

その->get()呼び出しをメソッドに含めず、代わりにメソッドを呼び出すときに含める場合 (上記のように)、クエリ ビルダーが返されるため、呼び出す前に他の where ステートメントを追加できるはずです。get()

$users = User::tall()->where("is_active", "=", 1)->get();
于 2013-10-14T22:00:30.077 に答える