我正在尝试记录用户在我的网站上执行的特定操作,并让侦听器检查某些实体是否正在更新,如果是这样,我的目标是记录他们正在编辑的字段,但不是所有字段(有些字段并不重要)或太长)。
我在将更改集保存到数据库时遇到问题,这就是为什么我想过滤重要字段。这可以保存变更集,但是当变更集中有多个嵌套数组时,该数组无法正确保存(它会在数组内有 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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)