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

