我有这样的User和Holiday模型:

User model:

class User extends Authenticatable
{

    public function holidays(): HasMany
    {
         return $this->hasMany(Holiday::class);
    }

Holiday model:

class Holiday
{
    protected $fillable = [
        'dayoff', // DATE YYYY-MM-DD
        'user_id',
    ];

    public function user(): BelongsTo
    {
        return $this->belongsTo(User::class);
    }

给定$month$year,我希望获得所有用户及其相关假期(dayoff).

我怎样才能做到这一点呢?

Edit:

我这样重写了下面的answer条:

use Illuminate\Database\Eloquent\Builder;

$users = User::whereHas('holidays', function (Builder $query) use ($year, $month) {
    $query->whereYear('dayoff', $year)->whereMonth('dayoff', $month);
})->get();

但这给出了没有相关假期的用户列表(每个用户的dayoff个列表)

推荐答案

您可以改用left join,因此:

$month = $request->query('month');
$year = $request->query('year');

$users = User::leftJoin('holidays', function ($q) use ($month, $year) {
    $q->on('holidays.user_id', '=', 'users.id')
        ->whereMonth('dayoff', '=', $month)
        ->whereYear('dayoff', '=', $year);
})->select('users.*', 'holidays.dayoff')
->whereNotNull('holidays.dayoff')->get();

Php相关问答推荐

PHP cUrl扩展与v8.2.12更新损坏

Laravel:从匹配的数组数据中获取记录

WooCommerce:有条件地更改特定区域的发货类别

在Woocommerce变量产品中的标签附近显示所选属性选项名称

无法在Laravel/Vue停靠容器中启动MySQL

从WC会话变量更改WooCommerce checkout 托运方法成本

在WooCommerce中禁用客户用户角色的纳税计算

PHP测试字符串的所有POST值

如何实现对数据库表中多列的唯一约束?

将日期数组排序为年->;月

限制某些产品只能在WooCommerce的特定邮政编码/邮政编码范围内发货

我有一个显示记录的表格,每行在最右边有两个按钮.如何才能以正确的顺序获得表的值?

CKEDITOR-如何在PHP中判断提交后的空数据

允许在WooCommerce管理订单列表中使用计费邮箱进行搜索

Shopware 6插件:由于删除了配置密钥,更新后配置值不正确

WooCommerce 按产品运输插件:仅收取较高的运输费用

为什么 debug_backtrace() 不返回任何内容?

根据所选付款方式启用/禁用 WooCommerce 所需的 checkout 字段

PHP 中的curl -F request=@file.xml

.htaccess环境变量条件不被判断