如何通过laravel中的where条件获取绝对值?

How to get absolute value by where condition in laravel?

               public function getList(Request $request)
              {
                 $keyword = $request->keyword;
                 $status = $request->status;
                 $userId = $request->userId;
                 $list = DB::table('user')
                    ->selectRaw("user.id, user.name, user.email, user.status")
                    ->whereIn('user.id', $userId)
                    ->when(!empty($keyword), function ($query) use ($keyword) {
                        $query->where('user.name', 'like', '%' . $keyword . '%');
                        $query->orWhere('user.email', 'like', '%' . $keyword . '%');
                    })
                    ->when(!empty($status), function ($query) use ($status) {
                        $query->where('user.status', '=', $status);
                    });
                    $list->get()->toArray();
              }

在 laravel 中,我正在通过电子邮件、姓名和状态执行搜索功能。 上面的代码成功了..但是有一个小问题:

              {
                    "id": 10,
                    "name": "jony",
                    "email": "user1@gmail.con",
                    "createdAt": "05-05-2021 08:43:05",
                    "status": "2"
                },
                {
                    "id": 11,
                    "name": "test",
                    "email": "jony@gmail.com",
                    "createdAt": "05-05-2021 08:43:05",
                    "status": "1",
                }

当我输入带有关键字 jonykeyword 时,它会得到 2 个这样的项目,这是正确的。

但是当我将 status 设置为 1 或等于 2 时,结果保持不变。有什么方法可以根据正确的状态获得结果。请给我提意见。谢谢。

问题出在您的 orWhere 子句上,您可能希望将其包含在一个组中(将查询放在括号中,有关详细信息,请访问 HERE)。

这是您想要实现的目标:

public function getList(Request $request)
{
    $keyword = $request->keyword;
    $status = $request->status;
    $userId = $request->userId;
    $list = DB::table('user')
    ->selectRaw("user.id, user.name, user.email, user.status")
    ->whereIn('user.id', $userId)
    ->when(!empty($keyword), function ($query) use ($keyword) {
        $query->where(function ($query) use ($keyword) {
            $query->where('user.name', 'like', '%' . $keyword . '%');
            $query->orWhere('user.email', 'like', '%' . $keyword . '%');
        });
    })
    ->when(!empty($status), function ($query) use ($status) {
        $query->where('user.status', '=', $status);
    });
    $list->get()->toArray();
}