Я пытаюсь зарегистрировать конкретные действия, которые пользователи принимают на моем сайте, и проверить слушателя, если некоторые объекты обновляются, и если это так, моя цель – регистрировать поля, которые они редактируют, но не все поля (некоторые из них не важны или слишком долго).
У меня проблема с сохранением набора изменений в моей базе данных, поэтому я хочу фильтровать важные поля. Это работает для сохранения набора изменений, но когда в наборе изменений имеется несколько вложенных массивов, массив не сохраняется правильно (он отключается после 3 или около того массивов внутри массивов). Я использую тип массива в postgres. В моем postupdate мероприятии у меня есть:
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(); }
Я просматривал документы, но я не уверен, как перебирать $ changeet. Это многомерный массив, который может содержать переменное количество массивов в зависимости от количества обновленных полей. Userlog – это простой объект, который у меня есть для сохранения $ changeet, а поле журнала – массив.
Я создал функцию, которая принимает $ changeet и циклы через первые три уровня массива, но не сохраняет имя поля и сохраняет значения только до и после. Как получить доступ к именам полей, измененным в $ changeet?
Я думаю, что у меня есть решение, которое хорошо работает. Он добавляет тип сущности, поэтому он не соответствует набору изменений точно из Doctrine2, но я думаю, что это работает для моих целей. Я нашел кучу других сообщений, которые формируют людей, которые пытаются регистрировать определенные изменения в Доктрине со смешанными результатами, поэтому, пожалуйста, напишите, если у кого-то еще есть лучшее решение.
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; }