redbean php 是否考虑创建 mysql-触发器?

Does redbean php consider created mysql-triggers?

我正在使用 redbeanphp 4.3 并且正在努力理解为什么 mysql-db-trigger 没有被触发(或者可能被忽略)。

当我直接在数据库中工作(使用 phpmyadmin)并在 table B 中插入一行时,table A 中的一列得到更新。 当我间接使用数据库时(通过 rest-api,因此使用 redbean php),该行也插入 table B,但 [=47= 中的列] A 没有更新

我在使用 sugarorm 的 android 应用程序中也发现了同样的行为。

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

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

编辑 1: 使用 mysqli 和 pdo-driver 的脚本确实会导致与手动插入相同的行为(列得到更新)。所以PDO不可能是原因。

解法:

Table A 和 B 有 1:N 关系。

问题是误用了 redbean 的 R::store() 方法。 tableA的object1被加载,tableB的object2被插入(通过R::store()),触发器被执行,但是tableA的object1没有不认识它。 object1 上的最终 R::store() 已将后台更新覆盖为初始状态。

所以解决方案非常简单:删除 table B 对象上的 R::store() 。 在tableA的object1上调用R::store()时,先更新实体A,再插入实体B,会触发object1的更新。

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

  1. 配置 redBean 以记录 sql 查询:

    R::调试(真,3);

  2. 访问并打印日志:

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

你会在他们的官方 site.

上找到更多关于调试 redBean 的信息