laravel - 不在两者之间的laravel查询不起作用
问题描述
我必须在给定日期和时间(早上和晚上)搜索大厅进行预订。我如何使用 laravel 查询从数据中找到可用日期。如果我搜索日期 11-02-2019 到 27-02-2019 。它应该只返回“这些日期不可用!”。在此查询中,它返回预订 3。此查询有什么问题?我已经发布了数据库图像。
public function getAvailableEvents(Request $request)
{
try {
$allInputs = Input::all();
$categoryID = $request->input('category_id');
$startDate = $request->input('start_date');
$endDate = $request->input('end_date');
$time = $request->input('time');
$validation = Validator::make($allInputs, [
'category_id' => 'required',
'start_date' => 'required',
'end_date' => 'required',
'time' => 'required',
]);
if ($validation->fails()) {
DB::rollback();
return $response = (new apiresponse())->customResponse('Fields required!',
422,
$validation->errors()->toArray());
} else {
$getEvents = Booking::where('category_id', '=', $categoryID)
->where('booking_time', '!=', $time)
->where('date_from', '!=', $startDate)
->where('date_to', '!=', $endDate)
->orWhere('date_from', '<', $startDate)
->orWhere('date_to', '>', $endDate)
->whereNotBetween('date_from', [$startDate,$endDate])
->whereNotBetween('date_to', [$startDate,$endDate])
->whereRaw("? NOT BETWEEN date_from AND date_to", [$startDate, $endDate])
->get();
// dd($getEvents);
if (count($getEvents) > 0) {
$data = array();
for ($i = 0; $i < count($getEvents); $i++) {
$data[] = array(
"booking_id" => $getEvents[$i]->id,
"ref_no" => $getEvents[$i]->ref_no,
"category_id" => $getEvents[$i]->category_id,
"event_id" => $getEvents[$i]->event_id,
"user_id" => $getEvents[$i]->user_id,
"phone" => $getEvents[$i]->phone,
"booking_status" => $getEvents[$i]->booking_status,
"type" => $getEvents[$i]->type,
"date_from" => $getEvents[$i]->date_from,
"date_to" => $getEvents[$i]->date_to,
"booking_time" => $getEvents[$i]->booking_time,
"price" => $getEvents[$i]->price,
"rating" => $getEvents[$i]->rating,
"date_time" => $getEvents[$i]->date_time ?? "",
);
}
return $response = (new apiresponse())->customResponse('Events found!',
200,
$data);
} else {
DB::rollback();
return $response = (new apiresponse())->customResponse(
'These dates are not available!',
422,
(object)[]);
}
}
} catch (\Illuminate\Database\QueryException $ex) {
return $response = (new apiresponse())->customResponse(
'Fail!',
422,
$ex);
}
}
解决方案
小于/大于比较不能可靠地与varchar
日期列上的数据类型一起工作。
如果可以,请将列类型更改为DATE
(或类似的特定于日期的类型,任何适合您的应用程序的类型)。然后比较将按预期工作。
如果不能,可以使用该STR_TO_DATE()
函数转换为日期,然后进行比较。
推荐阅读
- python - 如何根据 python selenium 中的列表索引超出范围来消除此错误
- archlinux - 在 Arch linux 上安装 php5.6 时检查 freetype2 错误
- javascript - vue.js中的链js函数然后方法
- amazon-web-services - KOPS:在 AWS VPC 上具有私有网络的 Kubernetes 集群:错误列出节点
- java - 当您假设在用户输入中输入某些内容但按回车键时出现异常
- android - 我正在尝试从 firebase 获取下载网址,但它给了我另一个链接,例如“com.google.android.gms.tasks.zzu@b9761c8”
- java - 通过ajax在java中上传图片并在前端显示时出错,帮帮我
- php - 看板自定义字段
- sql - 参数化 SQL 查询中变量的影响
- linux - RHEL 7.4 中的 git 升级