我正在使用redbeanphp 4.3,并努力了解为什么未触发mysql-db-trigger(或可能被忽略)。

当我直接在数据库中工作(使用phpmyadmin)并在表B中插入一行时,表A中的列将得到更新。
当我不正确地使用数据库(通过rest-api,因此使用redbean php)时,该行也插入到表B中,但是表A中的列未更新。

我在Sugarorm的Android应用程序中也发现了完全相同的行为。

然后我推断,使用ORM会忽略触发器的使用。但是到目前为止,在某些论坛,redbean文档或rd.php源代码中都没有找到任何支持我论文的陈述。

一个解释或任何帮助,将不胜感激。
提前致谢。

编辑1:
使用mysqli和pdo-driver的脚本的行为与手动插入的行为相同(该列已更新)。因此PDO不能成为原因。

解:

表A和B具有1:N的关系。

问题是滥用redbean的R :: store()方法。表A的object1已加载,表B的object2已插入(通过R :: store()),执行了触发器,但表A的object1无法识别它。对象1上的最终R :: store()已将后台更新覆盖为初始状态。

因此解决方案非常简单:在表B的对象上删除R :: store()。
当在表A的object1上调用R :: store()时,它首先更新实体A,然后再插入实体B,这将触发对object1的更新。

最佳答案

尝试调试redBean创建的sql查询,并检查插入后是否有列更新或其他更新。


配置redBean记录SQL查询:

R :: debug(TRUE,3);
访问并打印日志:

$ logs = R :: getDatabaseAdapter()-> getDatabase()-> getLogger()-> getLogs();
print_r($ logs);


您可以在其官方site上找到有关调试redBean的更多信息。

10-06 06:19