redbean php 是不是考虑创建 mysql-triggers?
Posted
技术标签:
【中文标题】redbean php 是不是考虑创建 mysql-triggers?【英文标题】:Does redbean php consider created mysql-triggers?redbean php 是否考虑创建 mysql-triggers? 【发布时间】: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 用来与数据库交互的机制。 【参考方案1】:尝试调试 redBean 创建的 sql 查询,并检查插入后是否有列更新或其他内容。
配置 redBean 记录 sql 查询:
R::debug(TRUE, 3);
访问并打印日志:
$logs = R::getDatabaseAdapter()->getDatabase()->getLogger()->getLogs(); print_r($logs);
你可以在他们的官方site找到更多关于调试redBean的信息。
【讨论】:
以上是关于redbean php 是不是考虑创建 mysql-triggers?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Redbean PHP ORM 时,是不是必须在每个脚本中调用 R::freeze()?
在 Redbean 中给出链接 bean 表的名称是不是有规则?