如何将if..else条件语句改写为单行三元运算符用于Laravel DB插入
正确改写方案
核心错误说明
你之前的写法有两个核心问题:
- PHP 数组采用
固定键 => 动态值的结构,不需要把键名ort_free_delivery写到三元逻辑里,只需要对键对应的值做三元判断即可 - 三元运算符必须严格遵循
条件 ? 满足返回值 : 不满足返回值的结构,你之前的写法缺少多处:,且拆分为两个独立表达式,语法不合法
最终单行三元表达式
你可以直接把下面的代码替换掉你原来写的两行三元部分:
"ort_free_delivery" => ($request->city == "98" && $cartPrice >= 300000 && $request->province == "8" ? 'City sending free delivery' : ($request->city != "98" && $cartPrice >= 300000 && $request->province != "8" ? 'Country sending free delivery' : '')),
完整的插入代码示例
DB::table('order_detail')->insert([ "ort_ord_id" => $orderId, "ort_amount" => $value->price, "ort_total" => $value->discounted * $value->quantity, "ort_discount" => ($value->price * $value->quantity) - $value->discounted * $value->quantity, "ort_type" => "product", "ort_number" => $value->quantity, "ort_reference_id" => $value->id, "ort_free_delivery" => ($request->city == "98" && $cartPrice >= 300000 && $request->province == "8" ? 'City sending free delivery' : ($request->city != "98" && $cartPrice >= 300000 && $request->province != "8" ? 'Country sending free delivery' : '')), "created_at" => now(), "updated_at" => now() ]);
额外优化建议
如果觉得单行三元可读性差,也可以提前计算值再传入数组,逻辑完全等价:
// 提前计算运费标识 $freeDelivery = ''; if($request->city == "98" && $cartPrice >= 300000 && $request->province == "8"){ $freeDelivery = 'City sending free delivery'; }elseif($request->city != "98" && $cartPrice >=300000 && $request->province != "8"){ $freeDelivery = 'Country sending free delivery'; } // 插入时直接传变量 DB::table('order_detail')->insert([ // 其他字段保持不变 "ort_free_delivery" => $freeDelivery, // 其他字段保持不变 ]);
内容的提问来源于stack exchange,提问作者user9277271
相关产品推荐
相关产品推荐

