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

Laravel条件判断异常:始终进入else分支导致价格仅减1

问题分析与解决方案

你当前代码的核心问题是使用get()获取数据库数据后直接和字符串比较,get()方法返回的是集合(Collection)对象,不是单个的时间字符串,导致所有if条件都无法匹配,最终走到else分支。

具体问题点

$usersDay1 = DB::table('gift_card_services')->select('created_at')->where('id',1)->get();
这里的get()会返回包含查询结果的集合实例,哪怕只有一条数据,它也不是字符串类型,和"2022-10-07 19:56:20"直接比较永远不相等。

修正方案

方案1:用value()直接获取单个字段值

适合你这种查询单条记录单个字段的场景,value()会直接返回目标字段的字符串值:

$reqAmount = $service->price;
$useraa = auth()->user();

// 直接获取单个字段值
$usersDay1 = DB::table('gift_card_services')->where('id',1)->value('created_at');
$usersDay4 = DB::table('gift_card_services')->where('id',4)->value('created_at');
$usersDay7 = DB::table('gift_card_services')->where('id',7)->value('created_at');

if ($useraa->username == "abdoumadris") {
    if ($usersDay1 == "2022-10-07 19:56:20" ) {
        $reqAmount = ($service->price - 2);
    }
    else if ($usersDay4 == "2022-10-07 19:57:20") {
        $reqAmount = ($service->price - 6);
    }
    else if ($usersDay7 == "2022-10-07 19:59:00") {
        $reqAmount = ($service->price - 10);
    }else{
        $reqAmount = ($service->price - 1);
    }
}

方案2:用first()获取对象后取属性

如果需要后续使用该记录的其他字段,可以先获取整条记录对象,再访问属性:

// 获取单条记录对象
$recordDay1 = DB::table('gift_card_services')->where('id',1)->first();
// 避免记录不存在导致报错,先判断再取值
$usersDay1 = $recordDay1 ? $recordDay1->created_at : '';

// 同理处理$usersDay4、$usersDay7

额外优化:用Carbon处理时间比较

数据库的created_at如果是datetime类型,Laravel会自动转为Carbon实例,直接用字符串比较可能存在时区、毫秒精度等问题,建议用Carbon的方法精准比较:

use Carbon\Carbon;

// ...

if (Carbon::parse($usersDay1)->eq(Carbon::parse("2022-10-07 19:56:20"))) {
    $reqAmount = ($service->price - 2);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:05:14