MySQL 查询在 NaviCat 中有效,但在 SugarCRM 中无效

MySQL query works in NaviCat but not in SugarCRM

如果需要任何其他信息来帮助您解决问题,请告诉我。

我正在 运行宁 SugarCRM 6.5.20 CE

我有一个为自定义模块触发的逻辑挂钩,当我去检查日志时,查询显示了一个执行时间并且看起来 运行 很好,但数据库实际上并没有得到已更新。

我直接从 sugarcrm.log 文件中提取了相同的查询,然后 运行 Navicat 中的查询,并且...它更新得很好,没有任何问题。

我已经试过了

所以在这一点上我想把它归结为 MySQL 版本问题。我正在 运行ning 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 立即解决了问题。