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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 07:15:03