Eloquent条件在哪里过滤

さりげ*_*い告白 7 laravel eloquent

如果我有一个可选的变量,并且我只想让它在它上面进行搜索(如果已定义),我知道我可以这样做,但有没有办法在其他地方定义函数,所以我不需要一遍又一遍地重写相同的匿名函数?或者是解决这个问题的其他任何好的替代方案吗?

.......->where(function($query) use ($gender){
            if ($gender) {
                $query->where('gender', '=', $gender);
            }
            })->get();
Run Code Online (Sandbox Code Playgroud)

小智 22

从Laravel 5.2.27开始,您可以使用条件子句

例如:

->when($gender, function($query) use ($gender) {
        $query->where('gender', '=', $gender);
      })
->get();
Run Code Online (Sandbox Code Playgroud)


Lau*_*nce 10

您可以使用动态范围

class User extends Eloquent {

    public function scopeGender($query, $gender)
    {
        if ($gender) {
           return $query->whereGender($gender);
        }
        return $query;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后贯穿整个申请

...->gender($gender)->get();
Run Code Online (Sandbox Code Playgroud)