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
相关产品推荐
相关产品推荐

