TP5现有用户表和用户时间安排表,其中用户时间安排表两个字段starttimes 和endtimes记录用户已被安排的时间段,现用户通过输入一个时间段来筛选出这个时间段没有被安排工作的用户,模型代码怎么写
时间: 2024-09-14 09:10:26 浏览: 54
在TP5(ThinkPHP5)中,你可以使用SQL查询结合日期区间比较的方式来实现这个功能。假设你的用户表名为`users`,用户时间安排表叫做`schedule`,并且这两个表都有一个共同的用户ID字段`user_id`。
首先,你需要连接到数据库,然后编写如下的SQL查询:
```php
use think\Db; // 引入数据库操作类
// 获取当前用户输入的时间段
$starttime = '2023-01-01 09:00:00'; // 示例开始时间
$endtime = '2023-01-01 17:00:00'; // 示例结束时间
// 构建查询条件
$condition = [
['users.id', '=', 'schedule.user_id'], // 比较用户ID
['schedule.starttimes', '>=', $starttime],
['schedule.endtimes', '<=', $endtime], // 确保时间段包含在内
['schedule.id', 'is', null] // 或者筛选出未安排的记录(如果有的话)
];
// 查询无安排时间的用户信息
$unScheduledUsers = Db::table('users')
->alias('u') // 添加别名简化查询
->leftJoin('schedule', 'u.id=schedule.user_id', 'left') // 左外联接,保留所有用户
->where($condition)
->select();
// 遍历结果,打印或者保存数据
foreach ($unScheduledUsers as $user) {
echo "用户 ID: {$user['id']}, 用户名: {$user['username']} 没有在这个时间段安排工作。";
}
//
阅读全文