OctoberCMS同一Model内字段复制:实现组织地址同步至账单地址
解决方案
你可以直接通过字段映射赋值实现地址复制,以下提供两种常用的实现方式:
方式1:逐字段赋值(逻辑直观,适合新手维护)
直接在你标注的// Copy address logic here位置插入以下代码即可:
// 复制基础地址到账单地址 $organisation->billing_line_1 = $organisation->line_1; $organisation->billing_line_2 = $organisation->line_2; $organisation->billing_line_3 = $organisation->line_3; $organisation->billing_city = $organisation->city; $organisation->billing_state = $organisation->state; $organisation->billing_postcode = $organisation->postcode; $organisation->billing_country = $organisation->country; // 如果需要同步邮箱可额外增加这行 // $organisation->billing_email = $organisation->email;
方式2:循环批量赋值(代码简洁,方便后续字段扩展)
如果后续可能新增地址字段,推荐用数组映射的方式实现,后续新增字段只需要在$addressFields数组里追加字段名即可:
$addressFields = [ 'line_1', 'line_2', 'line_3', 'city', 'state', 'postcode', 'country', // 后续新增要同步的字段直接加在这里即可 // 'email' ]; foreach ($addressFields as $baseField) { $billingField = 'billing_' . $baseField; $organisation->$billingField = $organisation->$baseField; }
额外优化建议
建议增加组织不存在的异常判断,避免报错:
public function onCopyAddress() { $organisation = Organisation::find($this->param('id')); // 新增判空逻辑 if (!$organisation) { Flash::error('目标组织不存在,操作失败'); return Redirect::back(); } // 上面选一种复制逻辑放在这里 $organisation->save(); Flash::success($organisation->name." 地址已成功复制"); return Redirect::to('/organisations/'.$organisation->id); }
如果你的需求是复制当前表单提交的未入库地址,只需要把赋值时的$organisation->$baseField替换为Input::get($baseField)即可。
内容的提问来源于stack exchange,提问作者Jakef19
相关产品推荐
相关产品推荐

