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

如何在Statamic控制器中更新Replicator字段内指定字段值

解决Statamic中Replicator字段指定项的Total Delegates更新问题

你需要遍历Replicator字段的数组,根据预订的课程日期ID(即Replicator项的id)定位到目标项,再累加预订人数到对应字段。以下是修正后的完整代码:

$delegates_booked = $checkout_session->metadata->delegate_count;
$upcoming_course_date_id = $checkout_session->metadata->upcoming_course_date_id;
$course_id = $checkout_session->metadata->course_booked_id;

// 查询目标课程条目
$entry = Entry::query()
    ->where('collection', 'courses')
    ->where('id', $course_id)
    ->first();

if (!$entry) {
    // 处理条目不存在的情况,比如记录日志或返回错误
    return;
}

// 获取Replicator字段的所有课程项
$upcoming_courses = $entry->get('upcoming_courses');

// 遍历找到对应ID的课程项并更新人数
foreach ($upcoming_courses as &$course_item) {
    if ($course_item['id'] === $upcoming_course_date_id) {
        // 处理字段未初始化的情况,默认初始为0
        $current_delegates = $course_item['total_delegates'] ?? 0;
        $course_item['total_delegates'] = $current_delegates + $delegates_booked;
        break; // 找到目标项后退出循环
    }
}

// 更新Replicator字段并保存条目
$entry->set('upcoming_courses', $upcoming_courses);
$entry->save();

关键细节说明:

  • 使用引用遍历(&$course_item)直接修改数组内的项,无需额外重新赋值
  • 增加条目不存在的判断,避免后续代码触发报错
  • 用?? 0处理total_delegates字段未设置的场景,确保累加逻辑不会出现PHP警告
  • 匹配到目标项后立即终止循环,提升执行效率

如果你的字段实际名称是booked_delegates(和你原代码一致),只需将代码中的total_delegates替换为booked_delegates即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:47:17