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

Laravel中能否用IF语句从数据库取数据存入字符串?语法报错如何解决?

错误原因

  • 核心问题:PHP 不支持直接将 if 语句的返回值赋值给变量,$get_time = if (...) 属于非法语法,直接触发unexpected token "if"报错
  • 次要语法问题:else if(now()->isSaturday()) { { 多写了一个左大括号,也会导致语法解析失败
  • 逻辑遗漏:仅处理了周一、周六两种情况,其余日期没有赋值逻辑,变量会默认为null

修复方案

方案1:常规if-else写法(兼容所有PHP版本)

先声明变量再根据条件赋值,可读性最高

$time = null;
if (now()->isMonday()) {
    $time = DB::table('tbl_jadwal')->where('Hari', 'Senin')->value('Jadwal_masuk');
} elseif (now()->isSaturday()) {
    $time = DB::table('tbl_jadwal')->where('Hari', 'Sabtu')->value('Jadwal_masuk');
}
// 可补全其余日期的默认赋值逻辑
// else {
//     $time = 'your_default_value';
// }

方案2:三元运算符链式写法(兼容PHP7+)

适合简单的多条件判断场景,代码更精简

$time = now()->isMonday() 
    ? DB::table('tbl_jadwal')->where('Hari', 'Senin')->value('Jadwal_masuk')
    : (now()->isSaturday() 
        ? DB::table('tbl_jadwal')->where('Hari', 'Sabtu')->value('Jadwal_masuk')
        : null); // 第三个参数为其余日期的默认返回值

方案3:match表达式写法(兼容PHP8+)

语法最简洁,可读性更高,是目前的推荐写法

$time = match(true) {
    now()->isMonday() => DB::table('tbl_jadwal')->where('Hari', 'Senin')->value('Jadwal_masuk'),
    now()->isSaturday() => DB::table('tbl_jadwal')->where('Hari', 'Sabtu')->value('Jadwal_masuk'),
    default => null // 其余日期默认返回值
};

优化建议

可以把日期匹配和查询逻辑拆分,避免重复写DB查询代码:

// 先匹配对应的Hari字段值
$hari = match(true) {
    now()->isMonday() => 'Senin',
    now()->isSaturday() => 'Sabtu',
    default => ''
};
// 统一执行查询
$time = $hari ? DB::table('tbl_jadwal')->where('Hari', $hari)->value('Jadwal_masuk') : null;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:15:05