在不使用查询的情况下启动查询生成器

Starting Query Builder without using a query

所以,我可以使用 User::where('username', '!=', null)->get();

但是,我想使用 if 条件从第一个条件开始链接查询,在这种情况下 where('username', '!=', null) 是不必要的。让我举一个伪例子:

我是运行一份基于用户的报告,其中有几个字段。我想像这样初始化查询生成器,并使用 if 语句链接查询。

$user = User::class();   // I know I can't use this line, however you'll get the idea.

if (isset($gender)) {
   $user = $user->where('gender', $gender);
}

if (isset($age)) {
   $user = $user->where('age', $age);
}

$users = $user->get()

是开始查询(在第一行)的唯一方法:

$user = User::where('username', '!=', null)

您可以像这样实例化您的对象:

$user = (new User);

注意: 但是最好使用 when() 而不是 if 语句。

$users = User::when($gender, function ($query, $gender) {
    $query->where('gender', $gender);
})
->when($age, function ($query, $age) {
    $query->where('age', $age);
})
->get();

如果变量未初始化,您可以使用 isset() 方法,例如:

$users = User::when( isset($gender), function ($query, $gender) {
    $query->where('gender', $gender);
})
->when( isset($age), function ($query, $age) {
    $query->where('age', $age);
})
->get();

您正在寻找

$userQuery = User::query();

然后,添加一些附加条款:

$userQuery->where(...);

然后,提供 closure->first()->get() 等)来吸引您的用户:

$users = $userQuery->get();