如果我有一个可选的变量,我只想让它在被定义的情况下搜索它,我知道我可以这样做,但是有没有办法在其他地方定义这个函数,所以我不需要一遍又一遍地重写同一个匿名函数?或者,除了着手解决这个问题,还有其他好的 Select 吗?

.......->where(function($query) use ($gender){
            if ($gender) {
                $query->where('gender', '=', $gender);
            }
            })->get();

推荐答案

你可以用dynamic scope

class User extends Eloquent {

    public function scopeGender($query, $gender)
    {
        if ($gender) {
           return $query->whereGender($gender);
        }
        return $query;
    }
}

然后在整个申请过程中

...->gender($gender)->get();

Laravel相关问答推荐

用Laravel Filament创建变形组件

Laravel:通过数据透视表数据限制多对多Eager 加载

Laravel查询多对多关系

如何在 laravel 5.3 中验证没有 auth:api 中间件的用户?

Laravel 5 - 更改模型文件位置

调用未定义函数 Illuminate\Encryption\openssl_decrypt()

Mockery 和 Laravel 构造函数注入

如何处理 Laravel 的 SMTP 驱动程序中的自签名 TLS 证书?

使用 Eloquent 的 Laravel 块方法

在集合 laravel 中使用查询范围

Laravel - 排序的集合输出不是数组

Laravel - 如何恢复本地存储符号链接并刷新

Laravel 4 定义 RESTful 控制器

Laravel 扩展验证自定义消息

在 laravel 5.2 中禁用特定路由的 Web 中间件

如何在 Laravel 中将秒转换为天小时分钟

中间件中的 Laravel 依赖注入

如何在 Laravel 5.2 中手动发送密码重置请求?

如何从不是控制器方法的方法发送响应?

约定表名(带下划线)