检查从 Laravel 8 中 eloquent 返回的特定值

Posted

技术标签:

【中文标题】检查从 Laravel 8 中 eloquent 返回的特定值【英文标题】:Check a specific Value that returned from eloquent in Laravel 8 【发布时间】:2021-11-20 10:00:53 【问题描述】:

在我的 Laravel 控制器中,我有以下代码:

public function test($id)

    $emp_check = logentry::where([
        ['EmployeeFK', '=', $id],
        ['DateTime', '>', Carbon::now()->subHours(8)]
    ])->latest()->get();
    return $emp_check;

这些是从数据库返回的


"LogID": 2,
"DateTime": "2021-09-28 08:16:44",
"LocationX": null,
"LocationY": null,
"EmployeeFK": 1,
"Status": "checked out",
"ErrorResponse": null,
"SalaryChingValue": null,
"SalaryNote": null,
"LogNote": null,
"created_at": "2021-09-28 11:16:44"

有什么方法可以检查 eloquent 结果返回的“状态”值吗? 我知道有一些特定的方法可以做到这一点,但我真的不知道怎么写。

【问题讨论】:

是否要从集合中检索status 的列表? 我想检查从 eloquent 中检索到的这些 JSON 中的状态值 既然可能不止一个,您要单独检查还是批量检查? 我想检查一个单独的值 您的表格中的“状态”类型是什么? 【参考方案1】:

您可以在退货前简单地执行以下操作:

if($emp_check['Status'] == 'your condition')
   //do something

不确定这是否是您需要的,如果不是,请更新您的问题。

【讨论】:

不幸的是这些答案不起作用,因为返回的数据类型实际上是员工的模型【参考方案2】:

也许我理解错了,但是试试

$emp_check = logentry::where('EmployeeFK', $id)
    ->where('DateTime', '>', Carbon::now()->subHours(8))
    ->where('Status', $status)
    ->latest()->get();

或将其中一种状态更改为

$emp_check = logentry::where('EmployeeFK', $id)
    ->where('DateTime', '>', Carbon::now()->subHours(8))
    ->whereIn('Status', $statuses)
    ->latest()->get();

【讨论】:

【参考方案3】:

当您使用get() 方法来查找结果时。 get() 方法将返回一个可以循环的记录数组。您在 where 条件 中使用 id,所以如果您总是得到一条记录,您可以使用:

if($emp_check[0]->Status == 'your status')
    //do something

最好使用first() 获取单条记录。 或者你可以使用foreach loop

if($emp_check)
    foreach($emp_check as $v)
        if($v->Status == 'your status')
            //do something
        
    

【讨论】:

以上是关于检查从 Laravel 8 中 eloquent 返回的特定值的主要内容,如果未能解决你的问题,请参考以下文章

从 SQL 到 Laravel 8 Eloquent

有没有办法在 Laravel 5.8 中测试 Eloquent Observers?

Laravel eloquent 检查不存在的多对多关系

Laravel 在急切加载时使用 Eloquent 选择特定列

如何在 laravel 8 eloquent 中计算价值? [复制]

Laravel Eloquent 关系 - 不根据条件获取