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

Apex Trigger中如何关联查询更新父对象Truck__c的字段

报错原因及修复方案

直接修复当前SOQL报错

你的SOQL语法错误核心是:Booking__c上关联主对象Truck__c的字段Truck__c本身就是Truck记录的Id值,不需要额外加.id后缀,修改为以下写法即可解决报错:

Truck__c truckObj = [Select Id, Price__c from Truck__c where Id = :objBooking.Truck__c LIMIT 1];

注意必须加LIMIT 1,避免查询返回多条记录抛出运行时异常。


更合规的批量优化写法

你当前把SOQL写在循环内的写法违反Salesforce Governor Limit规则,数据量较大时会触发SOQL次数上限报错,建议直接在查询Booking__c时关联带出Truck__c的字段,不需要单独查询Truck对象:

  1. 首先修改Booking__c的查询语句,通过关系字段Truck__r直接查询关联的Truck字段:
List<Booking__c> bookingList = [SELECT Id, Truck__r.Id, Truck__r.Price__c FROM Booking__c WHERE Id IN :relatedBookingIdSet];
  1. 后续直接通过objBooking.Truck__r.Price__c即可拿到对应卡车的价格,无需额外发起SOQL查询。

现有触发器其他逻辑问题补充

你当前的代码还存在多处逻辑错误,建议同步修正:

  • 触发器仅声明了after insert触发事件,但判断条件包含Trigger.isUpdate,导致Payment更新时逻辑不会执行,修改触发器声明为:trigger TestTrigger on Payment__c (after insert, after update)
  • 查询Booking__c时过滤条件错误:你用Booking_ID__c in:payId过滤,实际Payment上关联Booking的查找字段应为Booking__c,需要按Payment记录的Booking__c字段值过滤Booking记录
  • 循环内单独执行update truckObj会触发DML次数限制,建议把需要更新的Truck记录放到List中,最后统一执行批量DML

内容的提问来源于stack exchange,提问作者unflagged.destination

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 17:15:01