在thinkPHP8中,如果您的数据库字段时间类型是Int型的,您可以按照以下方式进行时间区间查询的优化:
- 将前端传入的时间区间值转换为对应的时间戳格式:
在前端传入时间区间时,将时间转换为对应的时间戳格式,以便与数据库中的Int型时间字段进行比较。您可以使用JavaScript的Date
对象的getTime()
方法获取时间戳,然后将其传递给后端。 - 优化查询方法:
在您的代码中,使用select()
方法执行查询将返回所有符合条件的记录,而不是使用paginate()
方法进行分页查询。如果您希望进行分页查询,可以在优化后的代码中添加分页逻辑。
下面是优化后的代码示例:
$limit = isset($param['limit']) ? (int)$param['limit'] : 10;
$where = [];
if (isset($param['domain']) && !empty($param['domain'])) {
$where[] = ['domain', 'like', "%{$param['domain']}%"];
}
if (isset($param['suffix']) && !empty($param['suffix'])) {
$where[] = ['suffix', 'like', "%{$param['suffix']}%"];
}
if (isset($param['start_time']) && isset($param['end_time']) && !empty($param['start_time']) && !empty($param['end_time'])) {
$startTimestamp = strtotime($param['start_time']);
$endTimestamp = strtotime($param['end_time']);
$where[] = ['create_time', 'between', [$startTimestamp, $endTimestamp]];
}
// 添加分页逻辑
$total = self::where($where)->count();
$data = self::where($where)->order('id desc')->limit($limit)->select();
return [
'total' => $total,
'data' => $data,
];
在优化后的代码中,使用strtotime()
函数将传入的时间字符串转换为对应的时间戳。然后,将转换后的时间戳作为查询条件传递给where()
方法。同时,为了方便分页,添加了对总记录数的统计,并使用limit()
方法限制查询结果数量。
请根据您的实际需求和数据库结构进行相应的调整和测试。