我正在使用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的更多信息。