php - Laravel 查询范围以在相关模型的时间范围内选择没有日期的用户模型
问题描述
我正在尝试创建一个查询范围,它将选择今天没有休假的所有用户。休假时间作为日期范围保存在名为 的单独模型TimeOff
中。TimeOff
模型上的字段是start_date
和end_date
。
这是我一直在尝试的范围:
<?php
namespace App\Traits;
use Carbon\Carbon;
trait UserScopes
{
/**
* @param $query
* @param $day
* @return mixed
*/
public function scopeWhereIsNotTimeOffOnDay($query, $day)
{
return $query->where(function ($query) use ($day) {
$query->whereDoesntHave('timeOffs', function ($query) use ($day) {
$query->whereDate('start_date', '<=', $day->toDateString())
->whereDate('end_date', '>=', $day->toDateString());
});
});
}
/**
* @param $query
* @return mixed
*/
public function scopeWhereIsNotTimeOffToday($query)
{
return $query->whereIsNotTimeOffOnDay(Carbon::today());
}
}
为了测试我一直在修补程序中使用以下内容:
User::whereIsNotTimeOffToday()->first()->name;
返回的结果与我的预期不符。范围是返回具有相关 TimeOff 模型并且今天属于假期日期范围的人。
所以,简而言之,我希望用户选择所有当前没有休假的用户。
任何帮助是极大的赞赏。
解决方案
推荐阅读
- sql - 如何从 Bigquery 的用户输入中转义整个 sql 查询?
- ubuntu - GDB 无法设置附加的 Visual Studio docker 上不允许的控制终端操作
- python - Numpy 中的类散点操作
- python - McCullock-Pitts 神经元模型 (MCP) 中的阈值
- javascript - 错误:元素类型无效,检查相机的渲染方法
- javascript - 按第一个字符对输入数组的每个元素进行分组并作为对象返回
- php - APNs Keep http2 keep connection alive
- typescript - 如何在打字稿 DTO 中强制进行类型转换
- javascript - 使用 nightwatchjs 进行 Chrome 扩展 e2e 测试 - 如何从项目中打开 URL?
- reactjs - Google Analytics 4 和 React Router == 页面标题滞后