【发布时间】:2015-12-15 09:01:05
【问题描述】:
我正在使用 redbeanphp 4.3 并且很难理解为什么 mysql-db-trigger 没有被触发(或可能被忽略)。
当我直接在数据库中工作(使用 phpmyadmin)并在表 B 中插入一行时,表 A 中的一列得到更新。 当我间接使用数据库时(通过rest-api,因此使用redbean php),该行也插入到表B中,但表A中的列没有得到更新。。 p>
我在我的 android 应用程序中也发现了与 sugarorm 完全相同的行为。
然后我推断,使用 ORM 会忽略触发器的使用。但是到目前为止我没有找到任何支持我的论文的声明,在一些论坛、redbean 文档和 rd.php 源代码中都没有。
我们将不胜感激解释或任何帮助。 提前致谢。
编辑 1: 使用 mysqli 和 pdo-driver 的脚本确实会导致与手动插入相同的行为(列被更新)。因此PDO不可能是原因。
解决方案:
表 A 和 B 具有 1:N 的关系。
问题是滥用 redbean 的 R::store() 方法。加载了表 A 的 object1,插入了表 B 的 object2(通过 R::store()),执行了触发器,但表 A 的 object1 没有识别它。 object1 上的最终 R::store() 已将后台更新覆盖为初始状态。
所以解决方案非常简单:删除表 B 对象上的 R::store()。 在A表的object1上调用R::store()时,先更新实体A,然后插入实体B,触发object1的更新。
【问题讨论】:
-
这可能是 PDO 的问题,因为这将是您的 ORM 用来与数据库交互的机制。
标签: php mysql orm triggers redbean