如何通过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",
}
当我输入带有关键字 jony
的 keyword
时,它会得到 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();
}
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",
}
当我输入带有关键字 jony
的 keyword
时,它会得到 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();
}