首页 > 解决方案 > Laravel 查询范围以在相关模型的时间范围内选择没有日期的用户模型

问题描述

我正在尝试创建一个查询范围,它将选择今天没有休假的所有用户。休假时间作为日期范围保存在名为 的单独模型TimeOff中。TimeOff模型上的字段是start_dateend_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 模型并且今天属于假期日期范围的人。

所以,简而言之,我希望用户选择所有当前没有休假的用户。

任何帮助是极大的赞赏。

标签: phplaravel

解决方案


推荐阅读