Laravel whereHas 检查嵌套关系中的最后一条最新记录

Posted

技术标签:

【中文标题】Laravel whereHas 检查嵌套关系中的最后一条最新记录【英文标题】:Laravel whereHas check last latest record for condition in nested relation 【发布时间】:2022-01-03 03:28:33 【问题描述】:

我需要检查whereHas 中最新的最后一条记录是否有type 等于1。

$model->users()
    ->whereHas('relation', function ($query) use ($dates) 
        $query->whereBetween('created_at', $dates)
              ->latest()
              -> .... 
    );

已编辑

【问题讨论】:

【参考方案1】:

如果 最新 你的意思是 updated_at 时间戳是最新的,那么你可以做类似的事情

->whereHas('relation', function ($query) 
   $query->latest() // orderByDesc('updated_at')
         ->limit(1)
         ->where('type', 1);
)

【讨论】:

好的,所以我可能应该补充一点,它就像二级关系,因为我收到此错误:“SQLSTATE [42000]:语法错误或访问冲突:1140 GROUP 列混合(MIN()如果没有 GROUP BY 子句,则没有 GROUP 列的 ,MAX(),COUNT(),...) 是非法的”。我正在这样做: $department->users()->whereHas('applications', ....) and users() is belongsToMany and applications is hasMany 您在查询中是否使用了 count()、min()、max() 等聚合函数? 整个查询:$department->users() ->whereHas('applications', function ($query) use ($dates) $query->whereBetween('created_at', $dates) ->latest() ->limit(1) ->where('type', 1); , '>=', 2) ->with([ 'applications' => function ($query) use ($dates ) return $query->whereBetween('created_at', $dates); ]) ->get();

以上是关于Laravel whereHas 检查嵌套关系中的最后一条最新记录的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 搜索关系,包括 whereHas 中的 null

WhereHas Laravel 中的关系计数条件是啥

Laravel:具有 whereHas 和多对多关系的全局范围

Laravel 多个 whereHas 关系标准

Laravel 递归 whereHas on BelongsToMany 关系

Php 变量未传递到 whereHas 函数 - Laravel Eloquent