我有这样的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相关问答推荐

Laravel—通过单击处理多条路由

Laravel 9如何过滤$的项目与结果?

在保留唯一键值对的情况下高效合并嵌套数组

仅在WooCommerce管理订单视图上显示订单项自定义元数据

为什么正则表达式与得到的文本块之前得到的也行?

获取并判断WooCommerce用户订阅结束日期

Laravel:如何展平多维Eager 加载的集合

根据WooCommerce中的客户计费国家/地区更改产品价格

WooCommerce中特定付款方式的变更订单预留库存时间

正则表达式将文本替换为标签 html 以字符开头

向元素添加类时添加循环错误

添加或删除优惠券后自动刷新 WooCommerce checkout 表单字段

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

防止使用woocommerce_checkout_process下单

在 Laravel、Vuejs 和 Inertia 中配置 TypeScript 的问题

PHP 中的正则表达式,具有字符范围,但不包括特定字符

将样式文件或脚本引入WordPress模板

一个php应用程序可以实例化多个RNG吗

图像不会显示在生产中的 Laravel 应用程序中

将参数传递给 laravel 9 工厂