如果需要任何其他信息来帮助您解决问题,请告诉我。
我正在运行 SugarCRM 6.5.20 CE
我有一个为自定义模块触发的逻辑钩子,当我去检查日志时,查询显示执行时间并且似乎运行良好,但数据库实际上并没有更新。
我直接从 sugarcrm.log 文件中取出了相同的查询,然后在 Navicat 中运行了查询,并且......它更新得很好,没有问题。
我已经试过了
- 列/表名称周围的一些/无/全部反引号
- 确保我没有使用任何保留字
因此,在这一点上,我想将其归因于MySQL版本问题。我正在运行MySQL版本5.5.49-cll。
UPDATE `my_database`.`p_policies_cstm`
LEFT OUTER JOIN r_raises_p_policies_1_c ON p_policies_cstm.id_c = r_raises_p_policies_1_c.r_raises_p_policies_1p_policies_idb
LEFT OUTER JOIN r_raises_cstm ON r_raises_cstm.id_c = r_raises_p_policies_1_c.r_raises_p_policies_1r_raises_ida
SET factor_c = '1.00', client_ppp_c = '1,529,987.76'
WHERE r_raises_p_policies_1_c.r_raises_p_policies_1p_policies_idb = 'e1570120-56e0-5d75-8ab7-574f2ef83a5b'
有人可以帮助思考为什么它不会抛出错误但实际上不会更新数据库吗?
这也是它触发的日志文件:
Wed Jun 1 20:30:06 2016 [26589][1][INFO] Query:UPDATE my_database.p_policies_cstm
LEFT OUTER JOIN r_raises_p_policies_1_c ON p_policies_cstm.id_c = r_raises_p_policies_1_c.r_raises_p_policies_1p_policies_idb
LEFT OUTER JOIN r_raises_cstm ON r_raises_cstm.id_c = r_raises_p_policies_1_c.r_raises_p_policies_1r_raises_ida
SET factor_c = '1.00', client_ppp_c = '1,529,987.76'
WHERE r_raises_p_policies_1_c.r_raises_p_policies_1p_policies_idb = 'e1570120-56e0-5d75-8ab7-574f2ef83a5b'
Wed Jun 1 20:30:06 2016 [26589][1][INFO] Query Execution Time:0.000363111495972
Wed Jun 1 20:30:06 2016 [26589][1][INFO] Get One: |SELECT id_c FROM p_policies_cstm WHERE id_c = 'e1570120-56e0-5d75-8ab7-574f2ef83a5b'|
Wed Jun 1 20:30:06 2016 [26589][1][DEBUG] Limit Query:SELECT id_c FROM p_policies_cstm WHERE id_c = 'e1570120-56e0-5d75-8ab7-574f2ef83a5b' Start: 0 count: 1
Wed Jun 1 20:30:06 2016 [26589][1][INFO] Query:SELECT id_c FROM p_policies_cstm WHERE id_c = 'e1570120-56e0-5d75-8ab7-574f2ef83a5b' LIMIT 0,1
Wed Jun 1 20:30:06 2016 [26589][1][INFO] Query Execution Time:0.000181913375854
我之前的答案似乎有效,但实际上并没有起作用。
真正的解决方案是使用after_save
逻辑钩子,而不是使用before_save
逻辑钩子。
我不知道的是,在before_save
逻辑钩子中,当您触发 SQL 查询时,它会返回它并再次触发更新语句,但这次是空白值,我试图更新值。
将其更改为after_save
立即解决了问题。