You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8中如何检查Eloquent查询返回结果里的指定Status字段值

解决方案

首先注意:你当前代码中使用的get()方法返回的是Eloquent集合(Collection),哪怕查询结果仅包含1条数据,也需要先取出对应模型实例再访问字段。如果你的业务场景下同一个$id在8小时内最多只有1条匹配记录,建议先把get()替换为first(),直接返回单条模型实例,后续操作更简便。


场景1:使用first()获取单条记录(推荐)

修改后代码示例:

public function test($id)
{
    $emp_check = logentry::where([
        ['EmployeeFK', '=', $id],
        ['DateTime', '>', Carbon::now()->subHours(8)]
    ])->latest()->first();
    // 先判断是否查询到数据,避免空对象调用字段报错
    if ($emp_check) {
        // 直接访问Status字段检查值即可
        if ($emp_check->Status === 'checked out') {
            // Status为已签出时的业务逻辑
        } elseif ($emp_check->Status === 'checked in') {
            // Status为已签入时的业务逻辑
        }
    } else {
        // 无匹配记录时的业务逻辑
    }
    return $emp_check;
}

场景2:保留get()获取多条记录的情况

如果确实需要查询所有符合条件的记录,可通过遍历集合或集合内置方法检查Status字段:

public function test($id)
{
    $emp_check = logentry::where([
        ['EmployeeFK', '=', $id],
        ['DateTime', '>', Carbon::now()->subHours(8)]
    ])->latest()->get();
    
    // 方法1:遍历所有记录逐个检查Status
    foreach ($emp_check as $logEntry) {
        if ($logEntry->Status === 'checked out') {
            // 对应业务逻辑
        }
    }

    // 方法2:直接判断集合中是否存在Status为指定值的记录
    $hasCheckedOutLog = $emp_check->contains('Status', 'checked out');
    if ($hasCheckedOutLog) {
        // 存在已签出记录的业务逻辑
    }

    return $emp_check;
}

内容的提问来源于stack exchange,提问作者Mohammed_Alkhatib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 09:12:04