首页 > 解决方案 > 如果数据不为空,则使用 where 查询

问题描述

我有这个查询

$something = Something::where('height, '>=', $request->heightMin)
->where('height, '<=', $request->heightMax)
->get();

它有效,但如果我想使用现场年龄怎么办。这个文件不是必需的,所以我可能有值(int)或空值。所以如果我有值“null”,我希望这个字段被忽略。我怎样才能做到这一点?

标签: phpmysqllaravel

解决方案


您可以使用when仅在请求中存在值时应用查询。

文档

有时您可能希望仅在其他情况为真时才将子句应用于查询。where 例如,如果传入请求中存在给定的输入值,您可能只想应用语句。您可以使用以下when方法完成此操作:

$role = $request->input('role');

$users = DB::table('users')
                ->when($role, function ($query, $role) {
                    return $query->where('role_id', $role);
                })
                ->get();

when方法仅在第一个参数为真时执行给定的闭包。如果第一个参数是false,则不会执行闭包。

像这样的东西:

$something = Something::where('height', '>=', $request->heightMin)
    ->where('height', '<=', $request->heightMax)
    ->when($request->age, function ($query, $age) {
        // your query here
        $query->where('age', $age);
    })
    ->get();

推荐阅读