php - 遍历 Doctrine 的 changeSet

标签 php arrays symfony doctrine-orm

我正在尝试记录用户在我的网站上进行的特定操作,并让监听器检查某些实体是否正在更新,如果是这样,我的目标是记录他们正在编辑的字段,但不是所有字段(一些不重要或太长)。

我在将变更集保存到我的数据库时遇到问题,这就是我要过滤重要字段的原因。这可以保存变更集,但是当变更集中有多个嵌套数组时,该数组未正确保存(它在数组中有 3 个左右的数组后被切断)。我在 postgres 中使用数组类型。在我的更新后事件中,我有:

if ($entity instanceof ListingQuery) {
        $entityManager = $eventArgs->getEntityManager();
        $ul = new UserLog();
        $uow = $entityManager->getUnitOfWork();
        $changeset = $uow->getEntityChangeSet($entity);
        $ul = new UserLog();
        $ul->setLog($changeset);
        $ul->setUser($entity->getUser());
        $entityManager->persist($ul);
        $entityManager->flush();
    }

我一直在查看文档,但不确定如何遍历 $changeset。它是一个多维数组,可以根据更新的字段数在其中包含可变数量的数组。 Userlog 是我用来保存 $changeset 的一个简单实体,日志字段是一个数组。

我创建了一个函数,它接受 $changeset 并循环遍历数组的前三层,但它不保存字段的名称,只保存前后的值。如何访问 $changeset 中更改的字段名称?

最佳答案

我认为我有一个行之有效的解决方案。它添加了实体类型,因此它与 Doctrine2 中的变更集不完全匹配,但我认为适合我的目的。我发现了很多其他帖子,人们试图记录 Doctrine 中的特定更改,但结果不一,所以如果其他人有更好的解决方案,请发帖。

public function looparray($arr, $type) {
    $recordset[] = array($type);
    $keys[] = array_keys($arr);
    foreach ($keys as $key) {
        if (!is_array($key)) {
            if (array_key_exists($key, $arr)) {
                $recordset[] = array($key => $arr[$key]);
            }
        } else {
            foreach ($key as $key1) {
                if (!is_array([$key1])) {
                    $recordset[] = array($key1 => $arr[$key1]);
                } else {
                    if (!is_array([$key1])) {
                        $recordset[] = array($key1 => $arr[$key1]);
                    } else {
                        $recordset[] = array($key1 . ' changed ' => $key1);
                    }
                }
            }
        }
    }
    return $recordset;
}

关于php - 遍历 Doctrine 的 changeSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29762100/

相关文章:

php - 需要一个使用 PHP 和 CURL 将 XML 发布到 USPS 地址验证 Web 服务的示例

php - PHP 和 MySQL 在阿拉伯语和类似语言中的问题概述

php - 如何从外部站点将带有 curl 的 POST 数据发送到 magento Controller 功能?

python - 使用 cython 并行化 python 循环 numpy.searchsorted

javascript - Json 字符串数组格式 日期时间字段 - yyyy-MM-dd hh :mm:ss

Symfony2 ACL 访问多个用户的多个对象

php - 如何在 PHP 中生成随机单词?

symfony - 使用 deps 管理第三方资源是 Symfony 2 中的一个好习惯吗?

symfony - 如何不转义替换文本?

返回 Promise 的 Javascript 顺序函数