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

时间:2018-07-18 14:10:57

标签: laravel laravel-5 eloquent laravel-query-builder

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

但是,我想使用从第一个条件开始的条件来链接查询,在这种情况下不需要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)

2 个答案:

答案 0 :(得分:5)

您正在寻找

$userQuery = User::query();

然后添加一些附加条款:

$userQuery->where(...);

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

$users = $userQuery->get();

答案 1 :(得分:4)

您可以像实例化对象:

$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();