0

我有一个 Eloquent 模型,我想为特定模型创建一些快捷功能,比如可能User::tall()代替编写User::where("height", ">", 185). 但我希望它们既是静态方法又是非静态方法,这样我也可以调用$user->where('is_active', '=', '1')->tall().

有没有办法我可以做到这一点?我可以看到 Laravel 以某种方式设法做到了这一点,因为可以从两个上下文中调用 where 。我查看了代码,但我只能找到一个对象方法。

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 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 回答
1

你试过这样的东西吗?

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